Ce code contient 3 parties principales. La première sert à créer un sous-fichier contenant les communes ayant été soumises à la loi SRU au moins une fois. Dans la suite, il compare les données du fichier RPLS et des bilans SRU (annuels et triennaux) sur le nombre de logements sociaux construits. Et finalement, il regarde les entrées et les sorties de chaque commune soumise à la loi SRU.

Création du sous-fichier contenant les communes soumises à la loi SRU

Le code suivant sert à créer un sous-fichier contenant les données des communes ayant été soumises à la loi SRU au moins pour une année et/ou un bilan triennal. Ce fichier est créé à partir d’un fichier contenant les données de toutes les communes du territoire SRU.

library(sqldf)
## Le chargement a nécessité le package : gsubfn
## Le chargement a nécessité le package : proto
## Warning in fun(libname, pkgname): couldn't connect to display ":0"
## Le chargement a nécessité le package : RSQLite
library(tidyr)
library(dplyr)
## 
## Attachement du package : 'dplyr'
## Les objets suivants sont masqués depuis 'package:stats':
## 
##     filter, lag
## Les objets suivants sont masqués depuis 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
# Chargement des données
dat = read.csv(file = "../donnees_resultat/LLS_communes_quantitatif.csv",
               na = c('', 'NA', 'NaN', NaN, 'nan', 'NR'))
# Transformation des données en DataFrame
df = as.data.frame(dat)

Pour chaque bilan triennal, on crée un sous-fichier contenant les données des communes soumises à la loi SRU dans le bilan.

# Communes soumises pour chaque bilan triennal
co_so_02_04 = sqldf("SELECT * FROM df WHERE situation_02_04 LIKE 'Soumise%'") 
co_so_05_07 = sqldf("SELECT * FROM df WHERE situation_05_07 LIKE 'Soumise%'") 
co_so_08_10 = sqldf("SELECT * FROM df WHERE situation_08_10 LIKE 'Soumise%'")
co_so_11_13 = sqldf("SELECT * FROM df WHERE situation_11_13 LIKE 'Soumise%'")
co_so_14_16 = sqldf("SELECT * FROM df WHERE situation_14_16 LIKE 'Soumise%'")
co_so_17_19 = sqldf("SELECT * FROM df WHERE situation_17_19 LIKE 'Soumise%'")
# '*' signifie toutes les colonnes
# '%' sert à remplacer un caractère ou une chaine de caractères
# LIKE 'Soumise%' = commence par 'Soumise'

Pour chaque bilan annuel, on crée un sous-fichier contenant les données des communes soumises à la loi SRU dans le bilan.

# Communes soumises pour chaque bilan annuel
co_so_04 = sqldf("SELECT * FROM df WHERE situation_04 LIKE 'Soumise%'")
co_so_05 = sqldf("SELECT * FROM df WHERE situation_05 LIKE 'Soumise%'")
co_so_06 = sqldf("SELECT * FROM df WHERE situation_06 LIKE 'Soumise%'")
co_so_07 = sqldf("SELECT * FROM df WHERE situation_07 LIKE 'Soumise%'")
co_so_08 = sqldf("SELECT * FROM df WHERE situation_08 LIKE 'Soumise%'")
co_so_09 = sqldf("SELECT * FROM df WHERE situation_09 LIKE 'Soumise%'")
co_so_10 = sqldf("SELECT * FROM df WHERE situation_10 LIKE 'Soumise%'")
co_so_11 = sqldf("SELECT * FROM df WHERE situation_11 LIKE 'Soumise%'")
co_so_12 = sqldf("SELECT * FROM df WHERE situation_12 LIKE 'Soumise%'")
co_so_13 = sqldf("SELECT * FROM df WHERE situation_13 LIKE 'Soumise%'")
co_so_14 = sqldf("SELECT * FROM df WHERE situation_14 LIKE 'Soumise%'")
co_so_15 = sqldf("SELECT * FROM df WHERE situation_15 LIKE 'Soumise%'")
co_so_16 = sqldf("SELECT * FROM df WHERE situation_16 LIKE 'Soumise%'")
co_so_17 = sqldf("SELECT * FROM df WHERE situation_17 LIKE 'Soumise%'")
co_so_18 = sqldf("SELECT * FROM df WHERE situation_18 LIKE 'Soumise%'")
co_so_19 = sqldf("SELECT * FROM df WHERE situation_19 LIKE 'Soumise%'")
co_so_20 = sqldf("SELECT * FROM df WHERE situation_20 LIKE 'Soumise%'")
co_so_21 = sqldf("SELECT * FROM df WHERE situation_21 LIKE 'Soumise%'")

Création du sous-fichier contenant les données des communes soumises à la loi SRU dans les bilans triennaux.

# Assemblage pour tous les triennaux
co_so_tri = sqldf("SELECT * FROM co_so_02_04
                   UNION
                   SELECT * FROM co_so_05_07
                   UNION
                   SELECT * FROM co_so_08_10
                   UNION
                   SELECT * FROM co_so_11_13
                   UNION
                   SELECT * FROM co_so_14_16
                   UNION
                   SELECT * FROM co_so_17_19")
# la commande 'UNION' permet d'assembler les dataframes sans répétition des lignes

La taille de ce sous-fichier est de 1313 communes.

Création du sous-fichier contenant les données des commmunes soumises à la loi SRU dans les bilans annuels.

# Assemblage pour tous les ans
co_so_ann = sqldf("SELECT * FROM co_so_04
                   UNION
                   SELECT * FROM co_so_05
                   UNION
                   SELECT * FROM co_so_06
                   UNION
                   SELECT * FROM co_so_07
                   UNION
                   SELECT * FROM co_so_08
                   UNION
                   SELECT * FROM co_so_09
                   UNION
                   SELECT * FROM co_so_10
                   UNION
                   SELECT * FROM co_so_11
                   UNION
                   SELECT * FROM co_so_12
                   UNION
                   SELECT * FROM co_so_13
                   UNION
                   SELECT * FROM co_so_14
                   UNION
                   SELECT * FROM co_so_15
                   UNION
                   SELECT * FROM co_so_16
                   UNION
                   SELECT * FROM co_so_17
                   UNION
                   SELECT * FROM co_so_18
                   UNION
                   SELECT * FROM co_so_19
                   UNION
                   SELECT * FROM co_so_20
                   UNION
                   SELECT * FROM co_so_21")

La taille de ce sous-fichier est de 1508 communes. Il y a une grande différence du nombre de communes entre les bilans triennaux et les bilans annuels.

On peut regarder quelles communes sont dans les bilans triennaux mais non soumises à la loi SRU dans les bilans annuels.

# Liste des communes apparaissant dans au moins un bilan triennal mais n'étant 
# pas soumises à la loi SRU dans les bilans annuels
a = sqldf("SELECT code_commune FROM co_so_tri
           EXCEPT
           SELECT code_commune FROM co_so_ann")

Il s’agit des 11 communes suivantes : 12176, 20004, 26035, 31149, 31254, 44410, 54339, 57368, 57537, 58088, 73030.

À l’inverse, on peut regarder quelles sont les communes soumises à la loi SRU dans les bilans annuels mais qui n’apparaissent pas dans les bilans triennaux.

# Liste des communes étant soumises à la loi SRU dans les bilans annuels mais 
# n'apparaissant pas dans les bilans triennaux
a = sqldf("SELECT code_commune FROM co_so_ann
           EXCEPT
           SELECT code_commune FROM co_so_tri")

Il y a 206 communes dans cette liste, par exemples 01160, 14181, 22093, 35125, 49218, 50601, 69152, 73213, 89346, 97612.

Comme les bilans annuels couvrent les années de 2004 à 2021 et que les bilans triennaux couvrent les années de 2002 à 2019, on peut créer un autre sous-fichier contenant les communes soumises à laa loi SRU dans les bilans annuels de 2004 à 2019.

# Assemblage pour les années jusqu'en 2019
co_so_ann_19 = sqldf("SELECT * FROM co_so_04
                   UNION
                   SELECT * FROM co_so_05
                   UNION
                   SELECT * FROM co_so_06
                   UNION
                   SELECT * FROM co_so_07
                   UNION
                   SELECT * FROM co_so_08
                   UNION
                   SELECT * FROM co_so_09
                   UNION
                   SELECT * FROM co_so_10
                   UNION
                   SELECT * FROM co_so_11
                   UNION
                   SELECT * FROM co_so_12
                   UNION
                   SELECT * FROM co_so_13
                   UNION
                   SELECT * FROM co_so_14
                   UNION
                   SELECT * FROM co_so_15
                   UNION
                   SELECT * FROM co_so_16
                   UNION
                   SELECT * FROM co_so_17
                   UNION
                   SELECT * FROM co_so_18
                   UNION
                   SELECT * FROM co_so_19")

On peut vérifier que la liste des communes soumises à la loi SRU dans les bilans annuels jusqu’en 2019 mais qui n’apparaissent pas dans les bilans triennaux est plus petite que la précédente.

# Liste des communes étant soumises à la loi SRU dans les bilans annuels
# jusqu'en 2019 mais n'apparaissant pas dans les bilans triennaux
a = sqldf("SELECT code_commune FROM co_so_ann_19
           EXCEPT
           SELECT code_commune FROM co_so_tri")

Il y a 162 communes dans cette liste.

On réunit maintenant les deux sous-fichiers contenant les informations des communes soumises pour tous les bilans de la loi SRU.

# Assemblage de toutes les communes soumises à la loi SRU
co_so = sqldf("SELECT * FROM co_so_ann
               UNION
               SELECT * FROM co_so_tri")

# Exportation des données au format csv
write.csv(x = co_so, file = '../donnees_resultat/communes_soumises_SRU.csv',
          row.names = FALSE)
saveRDS(co_so, "../donnees_resultat/communes_soumises_SRU.rds")

Constructions et nombre de logements sociaux

L’information sur le nombre de nouveaux logements locatifs sociaux d’une commune est contenue sous deux formes dans notre fichier. La première est une information triennal portant sur le nombre de constructions de logements locatifs sociaux en trois ans (entre 2002 et 2004, entre 2005 et 2007, entre 2008 et 2010, entre 2011 et 2013, entre 2014 et 2016, entre 2017 et 2019). La deuxième est le nombre de logements locatifs sociaux de chaque commune pour chaque année. Nous comparer ces deux informations.

On compte le nombre total de constructions de logements locatifs sociaux à partir de 2005 car les bilans annuels commençant en 2004, nous n’avons pas d’informations sur le nombre de logements locatifs sociaux avant 2004.

# Nombre de constructions de LLS totales pour chaque commune
co_so$constructions_totales = co_so$construction_05_07 +
                              co_so$construction_08_10 + co_so$construction_11_13 +
                              co_so$construction_14_16 + co_so$construction_17_19
# Variation pour chaque commune du nombre de LLS
co_so$variation_LLS_04_18 = co_so$LLS_18 - co_so$LLS_04
co_so$variation_LLS_04_19 = co_so$LLS_19 - co_so$LLS_04
co_so$variation_LLS_04_20 = co_so$LLS_20 - co_so$LLS_04
co_so$variation_LLS_04_21 = co_so$LLS_21 - co_so$LLS_04
# Variation pour chaque commune du nombre de LLS
co_so$variation_LLS_05_18 = co_so$LLS_18 - co_so$LLS_05
co_so$variation_LLS_05_19 = co_so$LLS_19 - co_so$LLS_05
co_so$variation_LLS_05_20 = co_so$LLS_20 - co_so$LLS_05
co_so$variation_LLS_05_21 = co_so$LLS_21 - co_so$LLS_05

co_so$variation_LLS_06_21 = co_so$LLS_21 - co_so$LLS_06
# Différence entre les 2 pour 2004 et 2018
a = co_so$constructions_totales - co_so$variation_LLS_04_18
quantile(a, na.rm = TRUE, probs = seq(0, 1, 0.1))
##      0%     10%     20%     30%     40%     50%     60%     70%     80%     90% 
## -4534.0    49.0    86.6   121.0   164.0   200.5   245.0   311.1   418.0   658.3 
##    100% 
## 13676.0
# Différence entre les 2 pour 2004 et 2019
a = co_so$constructions_totales - co_so$variation_LLS_04_19
quantile(a, na.rm = TRUE, probs = seq(0, 1, 0.1))
##      0%     10%     20%     30%     40%     50%     60%     70%     80%     90% 
## -4858.0    38.0    70.0   105.0   148.4   183.5   218.0   279.1   366.8   593.8 
##    100% 
## 11617.0
# Différence entre les 2 pour 2004 et 2020
a = co_so$constructions_totales - co_so$variation_LLS_04_20
quantile(a, na.rm = TRUE, probs = seq(0, 1, 0.1))
##      0%     10%     20%     30%     40%     50%     60%     70%     80%     90% 
## -5226.0    30.0    55.6    89.0   120.0   158.0   191.6   244.1   325.8   509.0 
##    100% 
## 10417.0
# Différence entre les 2 pour 2004 et 2021
a = co_so$constructions_totales - co_so$variation_LLS_04_21
quantile(a, na.rm = TRUE, probs = seq(0, 1, 0.1))
##      0%     10%     20%     30%     40%     50%     60%     70%     80%     90% 
## -8446.0    15.0    44.0    66.0    93.0   130.0   168.8   210.1   282.4   429.7 
##    100% 
## 10438.0
# Différence entre les 2 pour 2005 et 2018
a = co_so$constructions_totales - co_so$variation_LLS_05_18
quantile(a, na.rm = TRUE, probs = seq(0, 1, 0.1))
##      0%     10%     20%     30%     40%     50%     60%     70%     80%     90% 
## -4486.0    54.0    91.0   123.9   169.8   206.0   256.0   322.0   424.0   670.1 
##    100% 
## 14212.0
# Différence entre les 2 pour 2005 et 2019
a = co_so$constructions_totales - co_so$variation_LLS_05_19
quantile(a, na.rm = TRUE, probs = seq(0, 1, 0.1))
##      0%     10%     20%     30%     40%     50%     60%     70%     80%     90% 
## -4810.0    44.3    76.0   110.0   153.0   185.0   225.8   289.1   378.4   609.5 
##    100% 
## 12153.0
# Différence entre les 2 pour 2005 et 2020
a = co_so$constructions_totales - co_so$variation_LLS_05_20
quantile(a, na.rm = TRUE, probs = seq(0, 1, 0.1))
##      0%     10%     20%     30%     40%     50%     60%     70%     80%     90% 
## -5178.0    36.0    61.0    92.0   123.0   163.0   201.0   253.3   332.0   524.7 
##    100% 
## 10953.0
# Différence entre les 2 pour 2005 et 2021
co_so$a = co_so$constructions_totales - co_so$variation_LLS_05_21
quantile(a, na.rm = TRUE, probs = seq(0, 1, 0.1))
##      0%     10%     20%     30%     40%     50%     60%     70%     80%     90% 
## -5178.0    36.0    61.0    92.0   123.0   163.0   201.0   253.3   332.0   524.7 
##    100% 
## 10953.0
summary(a)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max.     NA's 
## -5178.00    74.25   163.00   287.10   288.75 10953.00      942
# Différence entre les 2 pour 2006 et 2021
co_so$a = co_so$constructions_totales - co_so$variation_LLS_06_21
quantile(a, na.rm = TRUE, probs = seq(0, 1, 0.1))
##      0%     10%     20%     30%     40%     50%     60%     70%     80%     90% 
## -5178.0    36.0    61.0    92.0   123.0   163.0   201.0   253.3   332.0   524.7 
##    100% 
## 10953.0
summary(a)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max.     NA's 
## -5178.00    74.25   163.00   287.10   288.75 10953.00      942

On regarde les données des communes qui ont les plus grandes différences entre le nombre de constructions de logements locatifs sociaux annoncées dans les bilans triennaux et la variation du nombre de logements locatifs sociaux entre le premier janvier 2005 (bilan annuel 2006) et le premier janvier 2020 (bilan annuel 2021).

La commune 74010 a une variation de logements sociaux de 5356 de plus que de constructions. Il s’agit de la commune d’Annecy qui est issue de la fusion des communes 74010, 74011, 74093, 74182, 74217 et 74268 à partir du 1er janvier 2017.
La commune 74011 avait 1162 logements sociaux en 2005 et 1867 en 2017. Elle a déclaré 796 constructions.
La commune 74093 avait 1132 logements sociaux en 2005 et 1483 en 2017. Elle a déclaré 570 constructions dans cette période.
La commune 74182 avait 811 logements sociaux en 2005 et 908 en 2017.
La commune 74217 avait 0 logement sociaux en 2005 et 137 en 2017.
La commune 74268 avait 1500 logements sociaux en 2005 et 1770 en 2017.

La commune 75056 a une variation de logements sociaux de 4756 de plus que de constructions. Il s’agit de la commune de Paris.
85600 constructions déclarées dans les bilans triennaux.

# fichier du nombre de constructions
constructions = as.data.frame(readRDS("../donnees_resultat/Constr_Comm_2002_2021.rds"))
# liste des communes soumises au moins une fois à la loi SRU
communes = sqldf("SELECT code_commune FROM co_so")

# tous les logements sociaux du parc HLM des communes soumises au moins une fois à la loi SRU
constructions_com = sqldf("SELECT *
                           FROM constructions
                           WHERE DEPCOM in communes")

constructions_com a des informations sur 1399 mais il y a 1519 communes soumises à la loi SRU dans les données.

# liste des communes qui n'ont aucune construction de logements social du parc HLM après 2002
a = sqldf("SELECT *
           FROM communes
           EXCEPT
           SELECT DEPCOM
           FROM constructions_com")

117 communes qui sont présentes dans les bilans de la loi SRU ne sont pas présents dans le fichier sur le nombre de constructions.

La Corse et les DOM ne sont pas présents dans le fichier constructions (83 communes).

Paris (75056), Marseille (13055) et Lyon (69123) ont plusieurs arrondissements. Ces communes sont inscrites avec un code de commune dans le fichier des communes soumises et avec leurs codes d’arrondissements dans le fichiers des constructions.
Paris : 75056 – 75101 à 75120
Marseille : 13055 – 13201 à 13216
Lyon : 69123 – 69381 à 69389

59248 devient commune déléguée de 59183 le premier janvier 2010.
74011, 74093, 74182, 74217, 74268 deviennent des communes déléguées de 74011 le premier janvier 2017.
Fourqueux (78251) devient commune déléguée au sein de Saint-Germain-en-Laye (78551) (commune nouvelle) au premier janvier 2019.
78524 devient commune déléguée de 78158 le premier janvier 2019.

77005, 77124, 77447, 77517, 78090, 78128, 78238, 78601, 91390, 91533 ont des nombres d’habitants inférieurs à 3500 mais sont en Ile-de-France donc le seuil de nombre d’habitants pour être soumis à l’article 55 de la loi SRU est de 1500. Le fichier des constructions n’inclut peut-être que les communes à partir d’un seuil d’habitants.
Les autres communes de cette liste sont 06136, 24026, 30123, 50601, 57537, 71221, 83064, 83087, 83106, 83121, 83140, 83143, 91433.

# Calcul des constructions pour les communes ayant plusieurs agglomérations
arrondissements =
sqldf("SELECT '13055',
              sum(NbConstruct_2002) \"NbConstruct_2002\",
              sum(NbConstruct_2003) \"NbConstruct_2003\", 
              sum(NbConstruct_2004) \"NbConstruct_2004\",
              sum(NbConstruct_2005) \"NbConstruct_2005\",
              sum(NbConstruct_2006) \"NbConstruct_2006\",
              sum(NbConstruct_2007) \"NbConstruct_2007\",
              sum(NbConstruct_2008) \"NbConstruct_2008\",
              sum(NbConstruct_2009) \"NbConstruct_2009\",
              sum(NbConstruct_2010) \"NbConstruct_2010\",
              sum(NbConstruct_2011) \"NbConstruct_2011\",
              sum(NbConstruct_2012) \"NbConstruct_2012\",
              sum(NbConstruct_2013) \"NbConstruct_2013\",
              sum(NbConstruct_2014) \"NbConstruct_2014\",
              sum(NbConstruct_2015) \"NbConstruct_2015\",
              sum(NbConstruct_2016) \"NbConstruct_2016\",
              sum(NbConstruct_2017) \"NbConstruct_2017\",
              sum(NbConstruct_2018) \"NbConstruct_2018\",
              sum(NbConstruct_2019) \"NbConstruct_2019\",
              sum(NbConstruct_2020) \"NbConstruct_2020\",
              sum(NbConstruct_2021) \"NbConstruct_2021\",
              sum(NbConstruct_TT) \"NbConstruct_TT\"
       FROM constructions
       WHERE DEPCOM < 13217 AND DEPCOM > 13200
       UNION
       SELECT '75056',
              sum(NbConstruct_2002) \"NbConstruct_2002\",
              sum(NbConstruct_2003) \"NbConstruct_2003\", 
              sum(NbConstruct_2004) \"NbConstruct_2004\",
              sum(NbConstruct_2005) \"NbConstruct_2005\",
              sum(NbConstruct_2006) \"NbConstruct_2006\",
              sum(NbConstruct_2007) \"NbConstruct_2007\",
              sum(NbConstruct_2008) \"NbConstruct_2008\",
              sum(NbConstruct_2009) \"NbConstruct_2009\",
              sum(NbConstruct_2010) \"NbConstruct_2010\",
              sum(NbConstruct_2011) \"NbConstruct_2011\",
              sum(NbConstruct_2012) \"NbConstruct_2012\",
              sum(NbConstruct_2013) \"NbConstruct_2013\",
              sum(NbConstruct_2014) \"NbConstruct_2014\",
              sum(NbConstruct_2015) \"NbConstruct_2015\",
              sum(NbConstruct_2016) \"NbConstruct_2016\",
              sum(NbConstruct_2017) \"NbConstruct_2017\",
              sum(NbConstruct_2018) \"NbConstruct_2018\",
              sum(NbConstruct_2019) \"NbConstruct_2019\",
              sum(NbConstruct_2020) \"NbConstruct_2020\",
              sum(NbConstruct_2021) \"NbConstruct_2021\",
              sum(NbConstruct_TT) \"NbConstruct_TT\"
       FROM constructions
       WHERE DEPCOM > 75100 AND DEPCOM < 75121
       UNION
       SELECT '69123',
              sum(NbConstruct_2002) \"NbConstruct_2002\",
              sum(NbConstruct_2003) \"NbConstruct_2003\", 
              sum(NbConstruct_2004) \"NbConstruct_2004\",
              sum(NbConstruct_2005) \"NbConstruct_2005\",
              sum(NbConstruct_2006) \"NbConstruct_2006\",
              sum(NbConstruct_2007) \"NbConstruct_2007\",
              sum(NbConstruct_2008) \"NbConstruct_2008\",
              sum(NbConstruct_2009) \"NbConstruct_2009\",
              sum(NbConstruct_2010) \"NbConstruct_2010\",
              sum(NbConstruct_2011) \"NbConstruct_2011\",
              sum(NbConstruct_2012) \"NbConstruct_2012\",
              sum(NbConstruct_2013) \"NbConstruct_2013\",
              sum(NbConstruct_2014) \"NbConstruct_2014\",
              sum(NbConstruct_2015) \"NbConstruct_2015\",
              sum(NbConstruct_2016) \"NbConstruct_2016\",
              sum(NbConstruct_2017) \"NbConstruct_2017\",
              sum(NbConstruct_2018) \"NbConstruct_2018\",
              sum(NbConstruct_2019) \"NbConstruct_2019\",
              sum(NbConstruct_2020) \"NbConstruct_2020\",
              sum(NbConstruct_2021) \"NbConstruct_2021\",
              sum(NbConstruct_TT) \"NbConstruct_TT\"
       FROM constructions
       WHERE DEPCOM > 69380 AND DEPCOM < 69390")

constructions = sqldf("SELECT * FROM constructions UNION SELECT * FROM arrondissements")
constructions_com = sqldf("SELECT DEPCOM FROM constructions")

# On assemble les dataframes contenant les données des communes ayant des arrondissements et des autres communes
df = sqldf("SELECT *
              FROM co_so s JOIN constructions c  ON s.code_commune = c.DEPCOM")
df = df[,-(ncol(co_so)+1)] # pour enlever la deuxième colonne contenant le code de la commune
# Nombre de constructions de LLS d'après le fichier RPLS entre 2005 et 2019
df$NbConstruct_05_19 = rowSums(df[,(ncol(co_so)+4):(ncol(co_so)+18)]) # somme des constructions de 2005 à 2019
# fichier si besoin visualisation des données
titi = 
sqldf("SELECT code_commune,
       constructions_totales, NbConstruct_05_19, variation_LLS_06_21,
       constructions_totales - NbConstruct_05_19 \"Triennal - Annuel\",
       constructions_totales - variation_LLS_06_21 \"Trienal - RPLS\",
       NbConstruct_05_19 - variation_LLS_06_21 \"Annuel - RPLS\"
       FROM df")
# différence entre les nombres des constructions selon les bilans annuels et trienaux
tri_ann = df$constructions_totales - df$variation_LLS_06_21
tri_rpls = df$constructions_totales - df$NbConstruct_05_19
ann_rpls = df$variation_LLS_06_21 - df$NbConstruct_05_19
summary(df$NbConstruct_05_19)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
##     0.00    79.25   156.00   306.84   295.00 22706.00
summary(df$variation_LLS_06_21)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##  -370.0   139.5   253.0   611.0   456.0 87962.0     483
summary(ann_rpls)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
## -1016.0     5.0    39.0   213.9   113.0 65256.0     483
quantile(ann_rpls, probs = seq(0, 1, 0.1), na.rm = TRUE)
##      0%     10%     20%     30%     40%     50%     60%     70%     80%     90% 
## -1016.0   -34.2     0.0     9.0    22.2    39.0    56.0    88.6   142.4   263.0 
##    100% 
## 65256.0
df$diff_ann_rpls = ann_rpls

Types de logements sociaux construits

# code de Romain pour avoir les données RPLS sur les constructions après 2002 (RPLS_Charlotte.R)
geoloc2022 <- readRDS("../donnees_initiales/geoloc2022.rds")
# On garde les données des logements construits à partir 2002
# La méthode suivante n'est pas utilisée car elle prend plus de temps
# t1 = proc.time()
# geoloc <- filter(geoloc2022, geoloc2022$CONSTRUCT >= 2002)
# t1 = proc.time() - t1
# print(t1)
# On ajoute les codes des arrondissements de Lyon, Paris et Marseille aux codes des communes
communes_arr = as.data.frame(c(communes$code_commune, 13201:13216, 69381:69389, 75101:75120),
                             colnames = "code_commune")
# On garde les données des logements construits à partir 2002
# Méthode utilisée
#t1 = proc.time()
geoloc = sqldf("SELECT DEPCOM, FINAN, CONSTRUCT 
               FROM geoloc2022 
               WHERE CONSTRUCT >= 2002 AND
                     DEPCOM IN communes_arr")
#t1 = proc.time() - t1
#print(t1)

Il existe plusieurs financements des logements sociaux, certains ne sont pas classés comme étant des logements sociaux selon la loi SRU.
On fait 4 versions de ce qui peut-être des logements sociaux selon la loi SRU : - on enlève les logements PLI (16) qui ne sont pas des logements sociaux selon la loi SRU - on enlève les logements PLI (16) et PCL (17) qui sont noté comme PLI dans le dictionnaire des variable du fichier rpls dans les correspondances financement dans financement du parc récent mais pas dans financement total - on enlève les logements PLI (16), PCL (17) et les autres financements (49 et 99) - on enlève tous les logements qui ne sont pas notés explicitement comme logements sociaux dans la loi SRU (15, 16, 17, 49, 51, 55, 99)

# On enlève les logements financés par PLI qui ne sont pas des LS selon la loi SRU
geoloc_pli = sqldf("SELECT * FROM geoloc WHERE FINAN != 16")

# Retirer les PCL (possiblement non LS selon SRU)
geoloc_pli_pcl = sqldf("SELECT * FROM geoloc WHERE FINAN != 16 & FINAN != 17")

# Retirer les autres logements possiblements non LS selon SRU
geoloc_LS_2 = sqldf("SELECT * 
                     FROM geoloc 
                     WHERE FINAN NOT IN (16, 17, 49, 99)")

# Retirer les autres logements possiblements non LS selon SRU
geoloc_LS = sqldf("SELECT * 
                   FROM geoloc 
                   WHERE FINAN NOT IN (15, 16, 17, 49, 51, 55, 99)")
# Nombre de constructions de LS sociaux par commune et par année
Construct_pli = as.data.frame(table(geoloc_pli$DEPCOM, geoloc_pli$CONSTRUCT))
Construct_pli_pcl = as.data.frame(table(geoloc_pli_pcl$DEPCOM, geoloc_pli_pcl$CONSTRUCT))
Construct_LS_2 = as.data.frame(table(geoloc_LS_2$DEPCOM, geoloc_LS_2$CONSTRUCT))
Construct_LS = as.data.frame(table(geoloc_LS$DEPCOM, geoloc_LS$CONSTRUCT))
colnames(Construct_pli) <- c("code_commune","YEAR","NbConstruct")
colnames(Construct_pli_pcl) <- c("code_commune","YEAR","NbConstruct")
colnames(Construct_LS_2) <- c("code_commune", "YEAR", "NbConstruct")
colnames(Construct_LS) <- c("code_commune","YEAR","NbConstruct")
Construct_pli <- pivot_wider(Construct_pli, names_from = YEAR,
                             values_from = NbConstruct, 
                             names_prefix = "NbConstruct_")
Construct_pli_pcl <- pivot_wider(Construct_pli_pcl, names_from = YEAR,
                                 values_from = NbConstruct, 
                                 names_prefix = "NbConstruct_")
Construct_LS_2 <- pivot_wider(Construct_LS_2, names_from = YEAR,
                              values_from = NbConstruct, 
                              names_prefix = "NbConstruct_")
Construct_LS <- pivot_wider(Construct_LS, names_from = YEAR,
                            values_from = NbConstruct, 
                            names_prefix = "NbConstruct_")
# On assemble les arrondissements de Paris, Lyon et Marseille
arrondissements_commune = function(constructs){
sqldf("SELECT '13055' \"code_commune\",
              sum(NbConstruct_2002) \"NbConstruct_2002\",
              sum(NbConstruct_2003) \"NbConstruct_2003\", 
              sum(NbConstruct_2004) \"NbConstruct_2004\",
              sum(NbConstruct_2005) \"NbConstruct_2005\",
              sum(NbConstruct_2006) \"NbConstruct_2006\",
              sum(NbConstruct_2007) \"NbConstruct_2007\",
              sum(NbConstruct_2008) \"NbConstruct_2008\",
              sum(NbConstruct_2009) \"NbConstruct_2009\",
              sum(NbConstruct_2010) \"NbConstruct_2010\",
              sum(NbConstruct_2011) \"NbConstruct_2011\",
              sum(NbConstruct_2012) \"NbConstruct_2012\",
              sum(NbConstruct_2013) \"NbConstruct_2013\",
              sum(NbConstruct_2014) \"NbConstruct_2014\",
              sum(NbConstruct_2015) \"NbConstruct_2015\",
              sum(NbConstruct_2016) \"NbConstruct_2016\",
              sum(NbConstruct_2017) \"NbConstruct_2017\",
              sum(NbConstruct_2018) \"NbConstruct_2018\",
              sum(NbConstruct_2019) \"NbConstruct_2019\",
              sum(NbConstruct_2020) \"NbConstruct_2020\",
              sum(NbConstruct_2021) \"NbConstruct_2021\"
       FROM constructs
       WHERE code_commune < 13217 AND code_commune > 13200
       UNION
       SELECT '75056' \"code_commune\",
              sum(NbConstruct_2002) \"NbConstruct_2002\",
              sum(NbConstruct_2003) \"NbConstruct_2003\", 
              sum(NbConstruct_2004) \"NbConstruct_2004\",
              sum(NbConstruct_2005) \"NbConstruct_2005\",
              sum(NbConstruct_2006) \"NbConstruct_2006\",
              sum(NbConstruct_2007) \"NbConstruct_2007\",
              sum(NbConstruct_2008) \"NbConstruct_2008\",
              sum(NbConstruct_2009) \"NbConstruct_2009\",
              sum(NbConstruct_2010) \"NbConstruct_2010\",
              sum(NbConstruct_2011) \"NbConstruct_2011\",
              sum(NbConstruct_2012) \"NbConstruct_2012\",
              sum(NbConstruct_2013) \"NbConstruct_2013\",
              sum(NbConstruct_2014) \"NbConstruct_2014\",
              sum(NbConstruct_2015) \"NbConstruct_2015\",
              sum(NbConstruct_2016) \"NbConstruct_2016\",
              sum(NbConstruct_2017) \"NbConstruct_2017\",
              sum(NbConstruct_2018) \"NbConstruct_2018\",
              sum(NbConstruct_2019) \"NbConstruct_2019\",
              sum(NbConstruct_2020) \"NbConstruct_2020\",
              sum(NbConstruct_2021) \"NbConstruct_2021\"
       FROM constructs
       WHERE code_commune > 75100 AND code_commune < 75121
       UNION
       SELECT '69123' \"code_commune\",
              sum(NbConstruct_2002) \"NbConstruct_2002\",
              sum(NbConstruct_2003) \"NbConstruct_2003\", 
              sum(NbConstruct_2004) \"NbConstruct_2004\",
              sum(NbConstruct_2005) \"NbConstruct_2005\",
              sum(NbConstruct_2006) \"NbConstruct_2006\",
              sum(NbConstruct_2007) \"NbConstruct_2007\",
              sum(NbConstruct_2008) \"NbConstruct_2008\",
              sum(NbConstruct_2009) \"NbConstruct_2009\",
              sum(NbConstruct_2010) \"NbConstruct_2010\",
              sum(NbConstruct_2011) \"NbConstruct_2011\",
              sum(NbConstruct_2012) \"NbConstruct_2012\",
              sum(NbConstruct_2013) \"NbConstruct_2013\",
              sum(NbConstruct_2014) \"NbConstruct_2014\",
              sum(NbConstruct_2015) \"NbConstruct_2015\",
              sum(NbConstruct_2016) \"NbConstruct_2016\",
              sum(NbConstruct_2017) \"NbConstruct_2017\",
              sum(NbConstruct_2018) \"NbConstruct_2018\",
              sum(NbConstruct_2019) \"NbConstruct_2019\",
              sum(NbConstruct_2020) \"NbConstruct_2020\",
              sum(NbConstruct_2021) \"NbConstruct_2021\"
       FROM constructs
       WHERE code_commune > 69380 AND code_commune < 69390
       UNION
       SELECT *
       FROM constructs")}
Construct_pli = arrondissements_commune(Construct_pli)
Construct_pli_pcl = arrondissements_commune(Construct_pli_pcl)
Construct_LS_2 = arrondissements_commune(Construct_LS_2)
Construct_LS = arrondissements_commune(Construct_LS)
df_1 = sqldf("SELECT *
              FROM co_so s JOIN Construct_pli c  USING(code_commune)")
df_1 = df_1[,-(ncol(co_so)+1)] # pour enlever la deuxième colonne contenant le code de la commune

df_2 = sqldf("SELECT *
              FROM co_so s JOIN Construct_pli_pcl c  USING(code_commune)")
df_2 = df_2[,-(ncol(co_so)+1)] # pour enlever la deuxième colonne contenant le code de la commune

df_3 = sqldf("SELECT *
              FROM co_so s JOIN Construct_LS_2 c  USING(code_commune)")
df_3 = df_3[,-(ncol(co_so)+1)] # pour enlever la deuxième colonne contenant le code de la commune

df_4 = sqldf("SELECT *
              FROM co_so s JOIN Construct_pli c  USING(code_commune)")
df_4 = df_4[,-(ncol(co_so)+1)] # pour enlever la deuxième colonne contenant le code de la commune
# statistiques descriptives entre le nombre de constructions selon les bilans triennaux et le fichier RPLS avec la première version
summary(df_1$constructions_totales - rowSums(df_1[,(ncol(df_1)-16):(ncol(df_1)-2)]))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##  -490.0    96.5   189.0   485.9   347.0 63162.0     831
quantile(df_1$constructions_totales - rowSums(df_1[,(ncol(df_1)-16):(ncol(df_1)-2)]),
         seq(0, 1, 0.1), na.rm = TRUE)
##    0%   10%   20%   30%   40%   50%   60%   70%   80%   90%  100% 
##  -490    47    81   110   143   189   238   304   414   638 63162
# statistiques descriptives entre le nombre de constructions selon les bilans annuels et le fichier RPLS avec la première version
summary(df_1$variation_LLS_06_21 - rowSums(df_1[,(ncol(df_1)-16):(ncol(df_1)-2)]))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
## -1000.0     5.0    39.0   216.9   113.5 65524.0     483
quantile(df_1$variation_LLS_06_21 - rowSums(df_1[,(ncol(df_1)-16):(ncol(df_1)-2)]),
         seq(0, 1, 0.1), na.rm = TRUE)
##      0%     10%     20%     30%     40%     50%     60%     70%     80%     90% 
## -1000.0   -28.2     1.0    10.0    23.0    39.0    57.0    89.0   145.0   263.2 
##    100% 
## 65524.0
df_1$diff_cons_ann_rpls = df_1$variation_LLS_06_21 - rowSums(df_1[,(ncol(df_1)-16):(ncol(df_1)-2)])
df_1$diff_cons_tri_rpls = df_1$constructions_totales - rowSums(df_1[,(ncol(df_1)-16):(ncol(df_1)-2)])
df_1$rpls = rowSums(df_1[,(ncol(df_1)-16):(ncol(df_1)-2)])
# statistiques descriptives entre le nombre de constructions selon les bilans triennaux et le fichier RPLS avec la version 2
summary(df_2$constructions_totales - rowSums(df_2[,(ncol(df_2)-16):(ncol(df_2)-2)]))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##  -570.0    96.5   187.0   482.3   346.5 62894.0     831
quantile(df_2$constructions_totales - rowSums(df_2[,(ncol(df_1)-16):(ncol(df_2)-2)]),
         seq(0, 1, 0.1), na.rm = TRUE)
##    0%   10%   20%   30%   40%   50%   60%   70%   80%   90%  100% 
##     2    67    93   130   162   207   265   343   457   708 67170
# statistiques descriptives entre le nombre de constructions selon les bilans annuels et le fichier RPLS avec la version 2
summary(df_2$variation_LLS_06_21 - rowSums(df_2[,(ncol(df_2)-16):(ncol(df_2)-2)]))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
## -1016.0     5.0    39.0   213.9   113.0 65256.0     483
quantile(df_2$variation_LLS_06_21 - rowSums(df_1[,(ncol(df_2)-16):(ncol(df_2)-2)]),
         seq(0, 1, 0.1), na.rm = TRUE)
##      0%     10%     20%     30%     40%     50%     60%     70%     80%     90% 
## -1000.0   -28.2     1.0    10.0    23.0    39.0    57.0    89.0   145.0   263.2 
##    100% 
## 65524.0
df_2$diff_cons_ann_rpls = df_2$variation_LLS_06_21 - rowSums(df_2[,(ncol(df_2)-16):(ncol(df_2)-2)])
df_2$diff_cons_tri_rpls = df_2$constructions_totales - rowSums(df_2[,(ncol(df_2)-16):(ncol(df_2)-2)])
df_2$rpls = rowSums(df_2[,(ncol(df_2)-16):(ncol(df_2)-2)])
# statistiques descriptives entre le nombre de constructions selon les bilans triennaux et le fichier RPLS avec la version 3
summary(df_3$constructions_totales - rowSums(df_3[,(ncol(df_3)-16):(ncol(df_3)-2)]))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##  -489.0    97.0   191.0   489.7   348.5 63342.0     831
quantile(df_3$constructions_totales - rowSums(df_3[,(ncol(df_1)-16):(ncol(df_3)-2)]),
         seq(0, 1, 0.1), na.rm = TRUE)
##    0%   10%   20%   30%   40%   50%   60%   70%   80%   90%  100% 
##     2    68    94   131   164   212   266   344   460   708 67535
# statistiques descriptives entre le nombre de constructions selon les bilans annuels et le fichier RPLS avec la version 3
summary(df_3$variation_LLS_06_21 - rowSums(df_3[,(ncol(df_3)-16):(ncol(df_3)-2)]))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##  -785.0     6.0    40.0   222.8   114.5 65704.0     483
quantile(df_3$variation_LLS_06_21 - rowSums(df_3[,(ncol(df_3)-16):(ncol(df_3)-2)]),
         seq(0, 1, 0.1), na.rm = TRUE)
##      0%     10%     20%     30%     40%     50%     60%     70%     80%     90% 
##  -785.0   -21.4     1.0    12.0    25.0    40.0    60.0    90.0   147.4   275.2 
##    100% 
## 65704.0
df_3$diff_cons_ann_rpls = df_3$variation_LLS_06_21 - rowSums(df_3[,(ncol(df_3)-16):(ncol(df_3)-2)])
df_3$diff_cons_tri_rpls = df_3$constructions_totales - rowSums(df_3[,(ncol(df_3)-16):(ncol(df_3)-2)])
df_3$rpls = rowSums(df_3[,(ncol(df_3)-16):(ncol(df_3)-2)])
# statistiques descriptives entre le nombre de constructions selon les bilans triennaux et le fichier RPLS avec la version 4
summary(df_4$constructions_totales - rowSums(df_4[,(ncol(df_4)-16):(ncol(df_4)-2)]))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##  -490.0    96.5   189.0   485.9   347.0 63162.0     831
quantile(df_4$constructions_totales - rowSums(df_4[,(ncol(df_4)-16):(ncol(df_4)-2)]),
         seq(0, 1, 0.1), na.rm = TRUE)
##    0%   10%   20%   30%   40%   50%   60%   70%   80%   90%  100% 
##  -490    47    81   110   143   189   238   304   414   638 63162
# statistiques descriptives entre le nombre de constructions selon les bilans annuels et le fichier RPLS avec la version 4
summary(df_4$variation_LLS_06_21 - rowSums(df_4[,(ncol(df_4)-16):(ncol(df_4)-2)]))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
## -1000.0     5.0    39.0   216.9   113.5 65524.0     483
quantile(df_4$variation_LLS_06_21 - rowSums(df_4[,(ncol(df_4)-16):(ncol(df_4)-2)]),
         seq(0, 1, 0.1), na.rm = TRUE)
##      0%     10%     20%     30%     40%     50%     60%     70%     80%     90% 
## -1000.0   -28.2     1.0    10.0    23.0    39.0    57.0    89.0   145.0   263.2 
##    100% 
## 65524.0
df_4$diff_cons_ann_rpls = df_4$variation_LLS_06_21 - rowSums(df_4[,(ncol(df_4)-16):(ncol(df_4)-2)])
df_4$diff_cons_tri_rpls = df_4$constructions_totales - rowSums(df_4[,(ncol(df_4)-16):(ncol(df_4)-2)])
df_4$rpls = rowSums(df_4[,(ncol(df_4)-16):(ncol(df_4)-2)])

Calculs pour les communes soumises à la loi SRU dans tous les bilans annuels

# Les données des bilans SRU des communes soumises à la loi SRU tous les ans 
# entre 2006 et 2021
communes_soumises_06_21 = 
sqldf("SELECT c.*
       FROM co_so_06 c JOIN
            co_so_07 USING(code_commune) JOIN
            co_so_08 USING(code_commune) JOIN
            co_so_09 USING(code_commune) JOIN
            co_so_10 USING(code_commune) JOIN
            co_so_11 USING(code_commune) JOIN
            co_so_12 USING(code_commune) JOIN
            co_so_13 USING(code_commune) JOIN
            co_so_14 USING(code_commune) JOIN
            co_so_15 USING(code_commune) JOIN
            co_so_16 USING(code_commune) JOIN
            co_so_17 USING(code_commune) JOIN
            co_so_18 USING(code_commune) JOIN
            co_so_19 USING(code_commune) JOIN
            co_so_20 USING(code_commune) JOIN
            co_so_21 USING(code_commune)")

communes_soumises_05_19_tri =
  sqldf("SELECT c.*
         FROM co_so_05_07 c JOIN
              co_so_08_10 USING(code_commune) JOIN
              co_so_11_13 USING(code_commune) JOIN
              co_so_14_16 USING(code_commune) JOIN
              co_so_17_19 USING(code_commune)")
# liste des communes apparaissant dans tous les bilans annuels
communes = communes_soumises_06_21$code_commune

# liste des communes apparaissant dans tous les bilans triennaux
communes_tri = communes_soumises_05_19_tri$code_commune

# il faut ajouter les arrondissement de Marseille, Paris et Lyon
communes = as.data.frame(c(communes, 13201:13216, 69381:69389, 75101:75120),
                         col.names = 'code_commune')
communes_tri = as.data.frame(c(communes_tri, 13201:13216, 69381:69389, 75101:75120),
                             col.names = 'code_commune')
# On garde les lignes du fichier RPLS des logements construits à partir de 2002
# dans les communes soumises tous les ans à la loi SRU
rpls_2002_soumises = 
sqldf("SELECT DEPCOM, CONSTRUCT, FINAN
      FROM geoloc2022 
      WHERE CONSTRUCT >= 2002 AND DEPCOM IN communes")

# dans les communes soumises pour tous les bilans triennaux à la loi SRU
rpls_2002_soumises_tri = 
sqldf("SELECT DEPCOM, CONSTRUCT, FINAN
      FROM geoloc2022 
      WHERE CONSTRUCT >= 2002 AND DEPCOM IN communes_tri")

Il existe plusieurs financements des logements sociaux, certains ne sont pas classés comme étant des logements sociaux selon la loi SRU.
On fait 4 versions de ce qui peut-être des logements sociaux selon la loi SRU : - on enlève les logements PLI (16) qui ne sont pas des logements sociaux selon la loi SRU - on enlève les logements PLI (16) et PCL (17) qui sont noté comme PLI dans le dictionnaire des variable du fichier rpls dans les correspondances financement dans financement du parc récent mais pas dans financement total - on enlève les logements PLI (16), PCL (17) et les autres financements (49 et 99) - on enlève tous les logements qui ne sont pas notés explicitement comme logements sociaux dans la loi SRU (15, 16, 17, 49, 51, 55, 99)

# On enlève les logements financés par PLI qui ne sont pas des LS selon la loi SRU
rpls_2002_soumises_1 = sqldf("SELECT *
                              FROM rpls_2002_soumises
                              WHERE FINAN != 16")
rpls_2002_soumises_1_tri = sqldf("SELECT *
                              FROM rpls_2002_soumises_tri
                              WHERE FINAN != 16")

# Retirer les PCL (possiblement non LS selon SRU)
rpls_2002_soumises_2 = sqldf("SELECT * 
                              FROM rpls_2002_soumises 
                              WHERE FINAN != 16 & FINAN != 17")
rpls_2002_soumises_2_tri = sqldf("SELECT * 
                              FROM rpls_2002_soumises_tri
                              WHERE FINAN != 16 & FINAN != 17")

# Retirer les autres logements possiblements non LS selon SRU
rpls_2002_soumises_3 = sqldf("SELECT * 
                              FROM rpls_2002_soumises 
                              WHERE FINAN NOT IN (16, 17, 49, 99)")
rpls_2002_soumises_3_tri = sqldf("SELECT * 
                              FROM rpls_2002_soumises_tri 
                              WHERE FINAN NOT IN (16, 17, 49, 99)")

# Retirer les autres logements possiblements non LS selon SRU
rpls_2002_soumises_4 = sqldf("SELECT * 
                              FROM rpls_2002_soumises 
                              WHERE FINAN NOT IN (15, 16, 17, 49, 51, 55, 99)")
rpls_2002_soumises_4_tri = sqldf("SELECT * 
                              FROM rpls_2002_soumises_tri
                              WHERE FINAN NOT IN (15, 16, 17, 49, 51, 55, 99)")
# Nombre de constructions de LS sociaux par commune et par année
rpls_const_1 = as.data.frame(table(rpls_2002_soumises_1$DEPCOM, rpls_2002_soumises_1$CONSTRUCT))
rpls_const_2 = as.data.frame(table(rpls_2002_soumises_2$DEPCOM, rpls_2002_soumises_2$CONSTRUCT))
rpls_const_3 = as.data.frame(table(rpls_2002_soumises_3$DEPCOM, rpls_2002_soumises_3$CONSTRUCT))
rpls_const_4 = as.data.frame(table(rpls_2002_soumises_4$DEPCOM, rpls_2002_soumises_4$CONSTRUCT))

rpls_const_1_tri = as.data.frame(table(rpls_2002_soumises_1_tri$DEPCOM, rpls_2002_soumises_1_tri$CONSTRUCT))
rpls_const_2_tri = as.data.frame(table(rpls_2002_soumises_2_tri$DEPCOM, rpls_2002_soumises_2_tri$CONSTRUCT))
rpls_const_3_tri = as.data.frame(table(rpls_2002_soumises_3_tri$DEPCOM, rpls_2002_soumises_3_tri$CONSTRUCT))
rpls_const_4_tri = as.data.frame(table(rpls_2002_soumises_4_tri$DEPCOM, rpls_2002_soumises_4_tri$CONSTRUCT))
colnames(rpls_const_1) <- c("code_commune","YEAR","NbConstruct")
colnames(rpls_const_2) <- c("code_commune","YEAR","NbConstruct")
colnames(rpls_const_3) <- c("code_commune", "YEAR", "NbConstruct")
colnames(rpls_const_4) <- c("code_commune","YEAR","NbConstruct")

colnames(rpls_const_1_tri) <- c("code_commune","YEAR","NbConstruct")
colnames(rpls_const_2_tri) <- c("code_commune","YEAR","NbConstruct")
colnames(rpls_const_3_tri) <- c("code_commune", "YEAR", "NbConstruct")
colnames(rpls_const_4_tri) <- c("code_commune","YEAR","NbConstruct")
rpls_const_1 <- pivot_wider(rpls_const_1, names_from = YEAR,
                            values_from = NbConstruct, 
                            names_prefix = "NbConstruct_")
rpls_const_2 <- pivot_wider(rpls_const_2, names_from = YEAR,
                            values_from = NbConstruct, 
                            names_prefix = "NbConstruct_")
rpls_const_3 <- pivot_wider(rpls_const_3, names_from = YEAR,
                            values_from = NbConstruct, 
                            names_prefix = "NbConstruct_")
rpls_const_4 <- pivot_wider(rpls_const_4, names_from = YEAR,
                            values_from = NbConstruct, 
                            names_prefix = "NbConstruct_")

rpls_const_1_tri <- pivot_wider(rpls_const_1_tri, names_from = YEAR,
                            values_from = NbConstruct, 
                            names_prefix = "NbConstruct_")
rpls_const_2_tri <- pivot_wider(rpls_const_2_tri, names_from = YEAR,
                            values_from = NbConstruct, 
                            names_prefix = "NbConstruct_")
rpls_const_3_tri <- pivot_wider(rpls_const_3_tri, names_from = YEAR,
                            values_from = NbConstruct, 
                            names_prefix = "NbConstruct_")
rpls_const_4_tri <- pivot_wider(rpls_const_4_tri, names_from = YEAR,
                            values_from = NbConstruct, 
                            names_prefix = "NbConstruct_")
rpls_const_1 = arrondissements_commune(rpls_const_1)
rpls_const_2 = arrondissements_commune(rpls_const_2)
rpls_const_3 = arrondissements_commune(rpls_const_3)
rpls_const_4 = arrondissements_commune(rpls_const_4)

rpls_const_1_tri = arrondissements_commune(rpls_const_1_tri)
rpls_const_2_tri = arrondissements_commune(rpls_const_2_tri)
rpls_const_3_tri = arrondissements_commune(rpls_const_3_tri)
rpls_const_4_tri = arrondissements_commune(rpls_const_4_tri)

Pour les 4 versions, il y a 8 communes qui ne sont pas présentes dans les données RPLS depuis 2002 mais qui sont des communes soumises à la loi SRU tous les ans de 2006 à 2021 (donc les informations des communes du premier janvier 2005 au premier janvier 2020). Ce sont les communes : 2B037, 2B120, 77124, 97224, 97229, 97309, 97415 et 97422.

sqldf("SELECT code_commune FROM communes_soumises_06_21 
       EXCEPT
       SELECT code_commune FROM rpls_const_4")
##   code_commune
## 1        2B037
## 2        2B120
## 3        77124
## 4        97224
## 5        97229
## 6        97309
## 7        97415
## 8        97422
sqldf("SELECT code_commune FROM communes_soumises_05_19_tri
       EXCEPT
       SELECT code_commune FROM rpls_const_1_tri")
##   code_commune
## 1        2B037
## 2        2B120
## 3        77124

Pour les 4 versions de la définition de logement social, 3 communes présentes dans tous les bilans triennaux entre 2005 et 2019 ne sont pas présentes dans le fichier RPLS depuis 2002. Ce sont les communes 2B037, 2B120 et 77124, on les retrouve dans les 8 communes qui sont dans tous les bilans annuels mais pas les données RPLS depuis 2002.

geoloc2022[geoloc2022$DEPCOM=='2B037',]
##  [1] DEPCOM                 IDENT_REP              IDENT_INT             
##  [4] IDENT_ORG              DROIT                  CODEPOSTAL            
##  [7] LIBCOM                 NUMVOIE                INDREP                
## [10] TYPVOIE                NOMVOIE                NUMAPPT               
## [13] NUMBOITE               ESC                    COULOIR               
## [16] ETAGE                  COMPLIDENT             ENTREE                
## [19] BAT                    IMMEU                  COMPLGEO              
## [22] LIEUDIT                QPV                    TYPECONST             
## [25] NBPIECE                SURFHAB                CONSTRUCT             
## [28] LOCAT                  PATRIMOINE             ORIGINE               
## [31] RSEXPRO                SIRETEXPRO             FINAN                 
## [34] FINANAUTRE             CONV                   NUMCONV               
## [37] DATCONV                SORTIEPATRIM           OLDLOGT               
## [40] NEWLOGT                MODE                   BAIL                  
## [43] MODESURF               SURFMODE               LOYERPRINC            
## [46] LOYERACC               CONTRIB                CUS                   
## [49] DPEDATE                DPEENERGIE             DPESERRE              
## [52] SRU_EXPIR              SRU_ALINEA             IDENTGES              
## [55] CODSEGPATRIM           LIBSEGPATRIM           LOYERMAXAPL           
## [58] LOYERMAXCUS            QUALACQ                MISCOMMERCIAL         
## [61] PRIXVENTE              PRODFIN                REMLOCDATE            
## [64] CONTRESLOG             PMR                    DATMISEVENTE          
## [67] DATVEFFECT             DATE_DEP_DERLOCAT      DPE_CONSO_ENER        
## [70] DPE_CONSO_GES          DPE_NUM_REF            IDENT_FISCAL          
## [73] CAT_ORG                RS                     SIRET                 
## [76] DEP                    LIBDEP                 REG                   
## [79] LIBREG                 LIBEPCI                DEPARTEMENTS_DE_L_EPCI
## [82] REGIONS_DE_L_EPCI      ARN                    finan_cus             
## [85] mes_sanscumul          loymoy                 age                   
## [88] deconv                 duree_vacance          ANNEE_REMLOC          
## [91] MOIS_REMLOC            MOIS_BAIL              ANNEE_BAIL            
## [94] BAIL_DATE              REMLOCDATE_DATE        EPCI                  
## <0 lignes> (ou 'row.names' de longueur nulle)
geoloc2022[geoloc2022$DEPCOM=='2B120',]
##  [1] DEPCOM                 IDENT_REP              IDENT_INT             
##  [4] IDENT_ORG              DROIT                  CODEPOSTAL            
##  [7] LIBCOM                 NUMVOIE                INDREP                
## [10] TYPVOIE                NOMVOIE                NUMAPPT               
## [13] NUMBOITE               ESC                    COULOIR               
## [16] ETAGE                  COMPLIDENT             ENTREE                
## [19] BAT                    IMMEU                  COMPLGEO              
## [22] LIEUDIT                QPV                    TYPECONST             
## [25] NBPIECE                SURFHAB                CONSTRUCT             
## [28] LOCAT                  PATRIMOINE             ORIGINE               
## [31] RSEXPRO                SIRETEXPRO             FINAN                 
## [34] FINANAUTRE             CONV                   NUMCONV               
## [37] DATCONV                SORTIEPATRIM           OLDLOGT               
## [40] NEWLOGT                MODE                   BAIL                  
## [43] MODESURF               SURFMODE               LOYERPRINC            
## [46] LOYERACC               CONTRIB                CUS                   
## [49] DPEDATE                DPEENERGIE             DPESERRE              
## [52] SRU_EXPIR              SRU_ALINEA             IDENTGES              
## [55] CODSEGPATRIM           LIBSEGPATRIM           LOYERMAXAPL           
## [58] LOYERMAXCUS            QUALACQ                MISCOMMERCIAL         
## [61] PRIXVENTE              PRODFIN                REMLOCDATE            
## [64] CONTRESLOG             PMR                    DATMISEVENTE          
## [67] DATVEFFECT             DATE_DEP_DERLOCAT      DPE_CONSO_ENER        
## [70] DPE_CONSO_GES          DPE_NUM_REF            IDENT_FISCAL          
## [73] CAT_ORG                RS                     SIRET                 
## [76] DEP                    LIBDEP                 REG                   
## [79] LIBREG                 LIBEPCI                DEPARTEMENTS_DE_L_EPCI
## [82] REGIONS_DE_L_EPCI      ARN                    finan_cus             
## [85] mes_sanscumul          loymoy                 age                   
## [88] deconv                 duree_vacance          ANNEE_REMLOC          
## [91] MOIS_REMLOC            MOIS_BAIL              ANNEE_BAIL            
## [94] BAIL_DATE              REMLOCDATE_DATE        EPCI                  
## <0 lignes> (ou 'row.names' de longueur nulle)
geoloc2022[geoloc2022$DEPCOM=='77124',]
##  [1] DEPCOM                 IDENT_REP              IDENT_INT             
##  [4] IDENT_ORG              DROIT                  CODEPOSTAL            
##  [7] LIBCOM                 NUMVOIE                INDREP                
## [10] TYPVOIE                NOMVOIE                NUMAPPT               
## [13] NUMBOITE               ESC                    COULOIR               
## [16] ETAGE                  COMPLIDENT             ENTREE                
## [19] BAT                    IMMEU                  COMPLGEO              
## [22] LIEUDIT                QPV                    TYPECONST             
## [25] NBPIECE                SURFHAB                CONSTRUCT             
## [28] LOCAT                  PATRIMOINE             ORIGINE               
## [31] RSEXPRO                SIRETEXPRO             FINAN                 
## [34] FINANAUTRE             CONV                   NUMCONV               
## [37] DATCONV                SORTIEPATRIM           OLDLOGT               
## [40] NEWLOGT                MODE                   BAIL                  
## [43] MODESURF               SURFMODE               LOYERPRINC            
## [46] LOYERACC               CONTRIB                CUS                   
## [49] DPEDATE                DPEENERGIE             DPESERRE              
## [52] SRU_EXPIR              SRU_ALINEA             IDENTGES              
## [55] CODSEGPATRIM           LIBSEGPATRIM           LOYERMAXAPL           
## [58] LOYERMAXCUS            QUALACQ                MISCOMMERCIAL         
## [61] PRIXVENTE              PRODFIN                REMLOCDATE            
## [64] CONTRESLOG             PMR                    DATMISEVENTE          
## [67] DATVEFFECT             DATE_DEP_DERLOCAT      DPE_CONSO_ENER        
## [70] DPE_CONSO_GES          DPE_NUM_REF            IDENT_FISCAL          
## [73] CAT_ORG                RS                     SIRET                 
## [76] DEP                    LIBDEP                 REG                   
## [79] LIBREG                 LIBEPCI                DEPARTEMENTS_DE_L_EPCI
## [82] REGIONS_DE_L_EPCI      ARN                    finan_cus             
## [85] mes_sanscumul          loymoy                 age                   
## [88] deconv                 duree_vacance          ANNEE_REMLOC          
## [91] MOIS_REMLOC            MOIS_BAIL              ANNEE_BAIL            
## [94] BAIL_DATE              REMLOCDATE_DATE        EPCI                  
## <0 lignes> (ou 'row.names' de longueur nulle)
geoloc2022[geoloc2022$DEPCOM=='97224',]
##  [1] DEPCOM                 IDENT_REP              IDENT_INT             
##  [4] IDENT_ORG              DROIT                  CODEPOSTAL            
##  [7] LIBCOM                 NUMVOIE                INDREP                
## [10] TYPVOIE                NOMVOIE                NUMAPPT               
## [13] NUMBOITE               ESC                    COULOIR               
## [16] ETAGE                  COMPLIDENT             ENTREE                
## [19] BAT                    IMMEU                  COMPLGEO              
## [22] LIEUDIT                QPV                    TYPECONST             
## [25] NBPIECE                SURFHAB                CONSTRUCT             
## [28] LOCAT                  PATRIMOINE             ORIGINE               
## [31] RSEXPRO                SIRETEXPRO             FINAN                 
## [34] FINANAUTRE             CONV                   NUMCONV               
## [37] DATCONV                SORTIEPATRIM           OLDLOGT               
## [40] NEWLOGT                MODE                   BAIL                  
## [43] MODESURF               SURFMODE               LOYERPRINC            
## [46] LOYERACC               CONTRIB                CUS                   
## [49] DPEDATE                DPEENERGIE             DPESERRE              
## [52] SRU_EXPIR              SRU_ALINEA             IDENTGES              
## [55] CODSEGPATRIM           LIBSEGPATRIM           LOYERMAXAPL           
## [58] LOYERMAXCUS            QUALACQ                MISCOMMERCIAL         
## [61] PRIXVENTE              PRODFIN                REMLOCDATE            
## [64] CONTRESLOG             PMR                    DATMISEVENTE          
## [67] DATVEFFECT             DATE_DEP_DERLOCAT      DPE_CONSO_ENER        
## [70] DPE_CONSO_GES          DPE_NUM_REF            IDENT_FISCAL          
## [73] CAT_ORG                RS                     SIRET                 
## [76] DEP                    LIBDEP                 REG                   
## [79] LIBREG                 LIBEPCI                DEPARTEMENTS_DE_L_EPCI
## [82] REGIONS_DE_L_EPCI      ARN                    finan_cus             
## [85] mes_sanscumul          loymoy                 age                   
## [88] deconv                 duree_vacance          ANNEE_REMLOC          
## [91] MOIS_REMLOC            MOIS_BAIL              ANNEE_BAIL            
## [94] BAIL_DATE              REMLOCDATE_DATE        EPCI                  
## <0 lignes> (ou 'row.names' de longueur nulle)
geoloc2022[geoloc2022$DEPCOM=='97229',]
##  [1] DEPCOM                 IDENT_REP              IDENT_INT             
##  [4] IDENT_ORG              DROIT                  CODEPOSTAL            
##  [7] LIBCOM                 NUMVOIE                INDREP                
## [10] TYPVOIE                NOMVOIE                NUMAPPT               
## [13] NUMBOITE               ESC                    COULOIR               
## [16] ETAGE                  COMPLIDENT             ENTREE                
## [19] BAT                    IMMEU                  COMPLGEO              
## [22] LIEUDIT                QPV                    TYPECONST             
## [25] NBPIECE                SURFHAB                CONSTRUCT             
## [28] LOCAT                  PATRIMOINE             ORIGINE               
## [31] RSEXPRO                SIRETEXPRO             FINAN                 
## [34] FINANAUTRE             CONV                   NUMCONV               
## [37] DATCONV                SORTIEPATRIM           OLDLOGT               
## [40] NEWLOGT                MODE                   BAIL                  
## [43] MODESURF               SURFMODE               LOYERPRINC            
## [46] LOYERACC               CONTRIB                CUS                   
## [49] DPEDATE                DPEENERGIE             DPESERRE              
## [52] SRU_EXPIR              SRU_ALINEA             IDENTGES              
## [55] CODSEGPATRIM           LIBSEGPATRIM           LOYERMAXAPL           
## [58] LOYERMAXCUS            QUALACQ                MISCOMMERCIAL         
## [61] PRIXVENTE              PRODFIN                REMLOCDATE            
## [64] CONTRESLOG             PMR                    DATMISEVENTE          
## [67] DATVEFFECT             DATE_DEP_DERLOCAT      DPE_CONSO_ENER        
## [70] DPE_CONSO_GES          DPE_NUM_REF            IDENT_FISCAL          
## [73] CAT_ORG                RS                     SIRET                 
## [76] DEP                    LIBDEP                 REG                   
## [79] LIBREG                 LIBEPCI                DEPARTEMENTS_DE_L_EPCI
## [82] REGIONS_DE_L_EPCI      ARN                    finan_cus             
## [85] mes_sanscumul          loymoy                 age                   
## [88] deconv                 duree_vacance          ANNEE_REMLOC          
## [91] MOIS_REMLOC            MOIS_BAIL              ANNEE_BAIL            
## [94] BAIL_DATE              REMLOCDATE_DATE        EPCI                  
## <0 lignes> (ou 'row.names' de longueur nulle)
geoloc2022[geoloc2022$DEPCOM=='97309',]
##  [1] DEPCOM                 IDENT_REP              IDENT_INT             
##  [4] IDENT_ORG              DROIT                  CODEPOSTAL            
##  [7] LIBCOM                 NUMVOIE                INDREP                
## [10] TYPVOIE                NOMVOIE                NUMAPPT               
## [13] NUMBOITE               ESC                    COULOIR               
## [16] ETAGE                  COMPLIDENT             ENTREE                
## [19] BAT                    IMMEU                  COMPLGEO              
## [22] LIEUDIT                QPV                    TYPECONST             
## [25] NBPIECE                SURFHAB                CONSTRUCT             
## [28] LOCAT                  PATRIMOINE             ORIGINE               
## [31] RSEXPRO                SIRETEXPRO             FINAN                 
## [34] FINANAUTRE             CONV                   NUMCONV               
## [37] DATCONV                SORTIEPATRIM           OLDLOGT               
## [40] NEWLOGT                MODE                   BAIL                  
## [43] MODESURF               SURFMODE               LOYERPRINC            
## [46] LOYERACC               CONTRIB                CUS                   
## [49] DPEDATE                DPEENERGIE             DPESERRE              
## [52] SRU_EXPIR              SRU_ALINEA             IDENTGES              
## [55] CODSEGPATRIM           LIBSEGPATRIM           LOYERMAXAPL           
## [58] LOYERMAXCUS            QUALACQ                MISCOMMERCIAL         
## [61] PRIXVENTE              PRODFIN                REMLOCDATE            
## [64] CONTRESLOG             PMR                    DATMISEVENTE          
## [67] DATVEFFECT             DATE_DEP_DERLOCAT      DPE_CONSO_ENER        
## [70] DPE_CONSO_GES          DPE_NUM_REF            IDENT_FISCAL          
## [73] CAT_ORG                RS                     SIRET                 
## [76] DEP                    LIBDEP                 REG                   
## [79] LIBREG                 LIBEPCI                DEPARTEMENTS_DE_L_EPCI
## [82] REGIONS_DE_L_EPCI      ARN                    finan_cus             
## [85] mes_sanscumul          loymoy                 age                   
## [88] deconv                 duree_vacance          ANNEE_REMLOC          
## [91] MOIS_REMLOC            MOIS_BAIL              ANNEE_BAIL            
## [94] BAIL_DATE              REMLOCDATE_DATE        EPCI                  
## <0 lignes> (ou 'row.names' de longueur nulle)
geoloc2022[geoloc2022$DEPCOM=='97415',]
##  [1] DEPCOM                 IDENT_REP              IDENT_INT             
##  [4] IDENT_ORG              DROIT                  CODEPOSTAL            
##  [7] LIBCOM                 NUMVOIE                INDREP                
## [10] TYPVOIE                NOMVOIE                NUMAPPT               
## [13] NUMBOITE               ESC                    COULOIR               
## [16] ETAGE                  COMPLIDENT             ENTREE                
## [19] BAT                    IMMEU                  COMPLGEO              
## [22] LIEUDIT                QPV                    TYPECONST             
## [25] NBPIECE                SURFHAB                CONSTRUCT             
## [28] LOCAT                  PATRIMOINE             ORIGINE               
## [31] RSEXPRO                SIRETEXPRO             FINAN                 
## [34] FINANAUTRE             CONV                   NUMCONV               
## [37] DATCONV                SORTIEPATRIM           OLDLOGT               
## [40] NEWLOGT                MODE                   BAIL                  
## [43] MODESURF               SURFMODE               LOYERPRINC            
## [46] LOYERACC               CONTRIB                CUS                   
## [49] DPEDATE                DPEENERGIE             DPESERRE              
## [52] SRU_EXPIR              SRU_ALINEA             IDENTGES              
## [55] CODSEGPATRIM           LIBSEGPATRIM           LOYERMAXAPL           
## [58] LOYERMAXCUS            QUALACQ                MISCOMMERCIAL         
## [61] PRIXVENTE              PRODFIN                REMLOCDATE            
## [64] CONTRESLOG             PMR                    DATMISEVENTE          
## [67] DATVEFFECT             DATE_DEP_DERLOCAT      DPE_CONSO_ENER        
## [70] DPE_CONSO_GES          DPE_NUM_REF            IDENT_FISCAL          
## [73] CAT_ORG                RS                     SIRET                 
## [76] DEP                    LIBDEP                 REG                   
## [79] LIBREG                 LIBEPCI                DEPARTEMENTS_DE_L_EPCI
## [82] REGIONS_DE_L_EPCI      ARN                    finan_cus             
## [85] mes_sanscumul          loymoy                 age                   
## [88] deconv                 duree_vacance          ANNEE_REMLOC          
## [91] MOIS_REMLOC            MOIS_BAIL              ANNEE_BAIL            
## [94] BAIL_DATE              REMLOCDATE_DATE        EPCI                  
## <0 lignes> (ou 'row.names' de longueur nulle)
geoloc2022[geoloc2022$DEPCOM=='97422',]
##  [1] DEPCOM                 IDENT_REP              IDENT_INT             
##  [4] IDENT_ORG              DROIT                  CODEPOSTAL            
##  [7] LIBCOM                 NUMVOIE                INDREP                
## [10] TYPVOIE                NOMVOIE                NUMAPPT               
## [13] NUMBOITE               ESC                    COULOIR               
## [16] ETAGE                  COMPLIDENT             ENTREE                
## [19] BAT                    IMMEU                  COMPLGEO              
## [22] LIEUDIT                QPV                    TYPECONST             
## [25] NBPIECE                SURFHAB                CONSTRUCT             
## [28] LOCAT                  PATRIMOINE             ORIGINE               
## [31] RSEXPRO                SIRETEXPRO             FINAN                 
## [34] FINANAUTRE             CONV                   NUMCONV               
## [37] DATCONV                SORTIEPATRIM           OLDLOGT               
## [40] NEWLOGT                MODE                   BAIL                  
## [43] MODESURF               SURFMODE               LOYERPRINC            
## [46] LOYERACC               CONTRIB                CUS                   
## [49] DPEDATE                DPEENERGIE             DPESERRE              
## [52] SRU_EXPIR              SRU_ALINEA             IDENTGES              
## [55] CODSEGPATRIM           LIBSEGPATRIM           LOYERMAXAPL           
## [58] LOYERMAXCUS            QUALACQ                MISCOMMERCIAL         
## [61] PRIXVENTE              PRODFIN                REMLOCDATE            
## [64] CONTRESLOG             PMR                    DATMISEVENTE          
## [67] DATVEFFECT             DATE_DEP_DERLOCAT      DPE_CONSO_ENER        
## [70] DPE_CONSO_GES          DPE_NUM_REF            IDENT_FISCAL          
## [73] CAT_ORG                RS                     SIRET                 
## [76] DEP                    LIBDEP                 REG                   
## [79] LIBREG                 LIBEPCI                DEPARTEMENTS_DE_L_EPCI
## [82] REGIONS_DE_L_EPCI      ARN                    finan_cus             
## [85] mes_sanscumul          loymoy                 age                   
## [88] deconv                 duree_vacance          ANNEE_REMLOC          
## [91] MOIS_REMLOC            MOIS_BAIL              ANNEE_BAIL            
## [94] BAIL_DATE              REMLOCDATE_DATE        EPCI                  
## <0 lignes> (ou 'row.names' de longueur nulle)

Ces 8 communes n’apparaissent pas dans le fichier RPLS.

communes_soumises_06_21$variation_LLS_06_21 = 
  communes_soumises_06_21$LLS_21 - communes_soumises_06_21$LLS_06
communes_soumises_05_19_tri$constructions_totales =
  communes_soumises_05_19_tri$construction_05_07 +
  communes_soumises_05_19_tri$construction_08_10 +
  communes_soumises_05_19_tri$construction_11_13 +
  communes_soumises_05_19_tri$construction_14_16 +
  communes_soumises_05_19_tri$construction_17_19
concat_diff_ann = function(df_sru, df_rpls){
  df_tt = sqldf("SELECT * FROM df_sru JOIN df_rpls USING(code_commune)")
  df_tt$rpls = rowSums(df_tt[,(ncol(df_tt)-16):(ncol(df_tt)-2)])
  df_tt$diff_ann_rpls = df_tt$variation_LLS_06_21 - df_tt$rpls
  print("La différence entre la variation du nombre de logements sociaux entre les premiers janvier 2005 et 2020 et le nombre de constructions de logements sociaux dans le fichier rpls :")
  print(summary(df_tt$diff_ann_rpls))
  print(quantile(df_tt$diff_ann_rpls, seq(0, 1, 0.1), na.rm = TRUE))
  df_tt}

concat_diff_tri = function(df_sru, df_rpls){
  df_tt = sqldf("SELECT * FROM df_sru JOIN df_rpls USING(code_commune)")
  df_tt$rpls = rowSums(df_tt[,(ncol(df_tt)-16):(ncol(df_tt)-2)])
  df_tt$diff_tri_rpls = df_tt$constructions_totales - df_tt$rpls
  print("La différence entre les nombre de constructions de logements sociaux des bilans triennaux de la loi SRU et le nombre de constructions de logements sociaux dans le fichier rpls :")
  print(summary(df_tt$diff_tri_rpls))
  print(quantile(df_tt$diff_tri_rpls, seq(0, 1, 0.1), na.rm = TRUE))
  df_tt
}
# les différences entre les données des bilans annuels et du fichier rpls
res_1 = concat_diff_ann(communes_soumises_06_21, rpls_const_1)
## [1] "La différence entre la variation du nombre de logements sociaux entre les premiers janvier 2005 et 2020 et le nombre de constructions de logements sociaux dans le fichier rpls :"
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  -845.0     7.0    35.0   236.3    93.0 65524.0 
##    0%   10%   20%   30%   40%   50%   60%   70%   80%   90%  100% 
##  -845    -9     3    11    22    35    50    73   120   207 65524
boxplot(res_1$diff_ann_rpls, ylab = "différences",
        main = "Différences entre les variations et les constructions de LLS",
        col = 'lightpink')

boxplot(res_1$diff_ann_rpls[res_1$diff_ann_rpls<3000], ylab = "différences",
        main = "Différences entre les variations et les constructions de LLS",
        sub = "sans les 4 valeurs supérieurs à 3000", col = 'lightpink')

hist(res_1$diff_ann_rpls[res_1$diff_ann_rpls<3000],
     xlab = "valeur absolue des différences",
     main = "Différences entre les variations et les constructions de LLS",
     sub = "sans les 4 valeurs supérieurs à 3000", breaks = 30, 
     col = 'lightpink')

ggplot(res_1, aes(x = diff_ann_rpls)) + 
  geom_histogram(color = 'darkgrey', fill = 'lightpink') + scale_x_log10() +
  labs(title = "Différences entre les variations et les constructions de LLS",
       subtitle = "entre 2005 et 2019", x = 'valeurs absolues des différences')
## Warning in self$trans$transform(x): Production de NaN
## Warning: Transformation introduced infinite values in continuous x-axis
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 87 rows containing non-finite values (`stat_bin()`).

# les différences entre les données des bilans triennaux et du fichier rpls
res_1_tri = concat_diff_tri(communes_soumises_05_19_tri, rpls_const_1_tri)
## [1] "La différence entre les nombre de constructions de logements sociaux des bilans triennaux de la loi SRU et le nombre de constructions de logements sociaux dans le fichier rpls :"
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##  -490.0    96.5   189.0   485.9   347.0 63162.0      11 
##    0%   10%   20%   30%   40%   50%   60%   70%   80%   90%  100% 
##  -490    47    81   110   143   189   238   304   414   638 63162
boxplot(res_1_tri$diff_tri_rpls, ylab = "différences", col = 'lightblue',
        main = "Différences entres les constructions LLS des bilans triennaux et RPLS")

boxplot(res_1_tri$diff_tri_rpls[res_1_tri$diff_tri_rpls<5000],
        ylab = "différences", col = 'lightblue',
        main = "Différences entres les constructions LLS des bilans triennaux et RPLS",
        sub = "sans 5 valeurs supérieurs à 5000")

hist(res_1_tri$diff_tri_rpls[res_1_tri$diff_tri_rpls<5000], col = 'lightblue',
        main = "Différences entres les constructions LLS des bilans triennaux et RPLS",
        sub = "sans 5 valeurs supérieurs à 5000", breaks = 25,
     xlab = "différences")

ggplot(res_1_tri, aes(x = diff_tri_rpls)) + 
  geom_histogram(color = 'darkgrey', fill = 'lightblue') + scale_x_log10() +
  labs(title = "Différences entres les constructions LLS des bilans triennaux et RPLS",
       sub = "entre 2005 et 2019", x = 'valeurs absolues des différences')
## Warning in self$trans$transform(x): Production de NaN

## Warning in self$trans$transform(x): Transformation introduced infinite values in
## continuous x-axis
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 20 rows containing non-finite values (`stat_bin()`).

# les différences entre les données des bilans annuels et du fichier rpls
res_2 = concat_diff_ann(communes_soumises_06_21, rpls_const_2)
## [1] "La différence entre la variation du nombre de logements sociaux entre les premiers janvier 2005 et 2020 et le nombre de constructions de logements sociaux dans le fichier rpls :"
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  -845.0     6.0    35.0   232.3    92.0 65256.0 
##    0%   10%   20%   30%   40%   50%   60%   70%   80%   90%  100% 
##  -845   -13     2    11    22    35    50    73   118   207 65256
boxplot(res_2$diff_ann_rpls, ylab = "différences",
        main = "Différences entre les variations et les constructions de LLS",
        col = 'lightpink')

boxplot(res_2$diff_ann_rpls[res_2$diff_ann_rpls<3000], ylab = "différences",
        main = "Différences entre les variations et les constructions de LLS",
        sub = "sans les 3 valeurs supérieurs à 3000", col = 'lightpink')

hist(res_2$diff_ann_rpls[res_2$diff_ann_rpls<3000],
     xlab = "valeur absolue des différences",
     main = "Différences entre les variations et les constructions de LLS",
     sub = "sans les 3 valeurs supérieurs à 3000", breaks = 30, 
     col = 'lightpink')

ggplot(res_2, aes(x = diff_ann_rpls)) + 
  geom_histogram(color = 'darkgrey', fill = 'lightpink') + scale_x_log10() +
  labs(title = "Différences entre les variations et les constructions de LLS",
       subtitle = "entre 2005 et 2019", x = 'valeurs absolues des différences')
## Warning in self$trans$transform(x): Production de NaN
## Warning: Transformation introduced infinite values in continuous x-axis
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 92 rows containing non-finite values (`stat_bin()`).

# les différences entre les données des bilans triennaux et du fichier rpls
res_2_tri = concat_diff_tri(communes_soumises_05_19_tri, rpls_const_2_tri)
## [1] "La différence entre les nombre de constructions de logements sociaux des bilans triennaux de la loi SRU et le nombre de constructions de logements sociaux dans le fichier rpls :"
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##  -570.0    96.5   187.0   482.3   346.5 62894.0      11 
##    0%   10%   20%   30%   40%   50%   60%   70%   80%   90%  100% 
##  -570    47    81   110   143   187   237   304   414   629 62894
boxplot(res_2_tri$diff_tri_rpls, ylab = "différences", col = 'lightblue',
        main = "Différences entres les constructions LLS des bilans triennaux et RPLS")

boxplot(res_2_tri$diff_tri_rpls[res_2_tri$diff_tri_rpls<5000],
        ylab = "différences", col = 'lightblue',
        main = "Différences entres les constructions LLS des bilans triennaux et RPLS",
        sub = "sans 5 valeurs supérieurs à 5000")

hist(res_2_tri$diff_tri_rpls[res_2_tri$diff_tri_rpls<5000], col = 'lightblue',
        main = "Différences entres les constructions LLS des bilans triennaux et RPLS",
        sub = "sans 5 valeurs supérieurs à 5000", breaks = 25,
     xlab = "différences")

ggplot(res_2_tri, aes(x = diff_tri_rpls)) + 
  geom_histogram(color = 'darkgrey', fill = 'lightblue') + scale_x_log10() +
  labs(title = "Différences entres les constructions LLS des bilans triennaux et RPLS",
       sub = "entre 2005 et 2019", x = 'valeurs absolues des différences')
## Warning in self$trans$transform(x): Production de NaN

## Warning in self$trans$transform(x): Transformation introduced infinite values in
## continuous x-axis
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 20 rows containing non-finite values (`stat_bin()`).

# les différences entre les données des bilans annuels et du fichier rpls
res_3 = concat_diff_ann(communes_soumises_06_21, rpls_const_3)
## [1] "La différence entre la variation du nombre de logements sociaux entre les premiers janvier 2005 et 2020 et le nombre de constructions de logements sociaux dans le fichier rpls :"
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  -747.0     8.0    35.0   240.5    93.0 65704.0 
##    0%   10%   20%   30%   40%   50%   60%   70%   80%   90%  100% 
##  -747    -6     4    12    23    35    51    75   120   212 65704
boxplot(res_3$diff_ann_rpls, ylab = "différences",
        main = "Différences entre les variations et les constructions de LLS",
        col = 'lightpink')

boxplot(res_3$diff_ann_rpls[res_3$diff_ann_rpls<3000], ylab = "différences",
        main = "Différences entre les variations et les constructions de LLS",
        sub = "sans les 4 valeurs supérieurs à 3000", col = 'lightpink')

hist(res_3$diff_ann_rpls[res_3$diff_ann_rpls<3000],
     xlab = "valeur absolue des différences",
     main = "Différences entre les variations et les constructions de LLS",
     sub = "sans les 4 valeurs supérieurs à 3000", breaks = 30, 
     col = 'lightpink')

ggplot(res_3, aes(x = diff_ann_rpls)) + 
  geom_histogram(color = 'darkgrey', fill = 'lightpink') + scale_x_log10() +
  labs(title = "Différences entre les variations et les constructions de LLS",
       subtitle = "entre 2005 et 2019", x = 'valeurs absolues des différences')
## Warning in self$trans$transform(x): Production de NaN
## Warning: Transformation introduced infinite values in continuous x-axis
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 82 rows containing non-finite values (`stat_bin()`).

# les différences entre les données des bilans triennaux et du fichier rpls
res_3_tri = concat_diff_tri(communes_soumises_05_19_tri, rpls_const_3_tri)
## [1] "La différence entre les nombre de constructions de logements sociaux des bilans triennaux de la loi SRU et le nombre de constructions de logements sociaux dans le fichier rpls :"
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##  -489.0    97.0   191.0   489.7   348.5 63342.0      11 
##    0%   10%   20%   30%   40%   50%   60%   70%   80%   90%  100% 
##  -489    47    81   114   145   191   242   311   422   655 63342
boxplot(res_3_tri$diff_tri_rpls, ylab = "différences", col = 'lightblue',
        main = "Différences entres les constructions LLS des bilans triennaux et RPLS")

boxplot(res_3_tri$diff_tri_rpls[res_3_tri$diff_tri_rpls<5000],
        ylab = "différences", col = 'lightblue',
        main = "Différences entres les constructions LLS des bilans triennaux et RPLS",
        sub = "sans 5 valeurs supérieurs à 5000")

hist(res_3_tri$diff_tri_rpls[res_3_tri$diff_tri_rpls<5000], col = 'lightblue',
        main = "Différences entres les constructions LLS des bilans triennaux et RPLS",
        sub = "sans 5 valeurs supérieurs à 5000", breaks = 25,
     xlab = "différences")

ggplot(res_3_tri, aes(x = diff_tri_rpls)) + 
  geom_histogram(color = 'darkgrey', fill = 'lightblue') + scale_x_log10() +
  labs(title = "Différences entres les constructions LLS des bilans triennaux et RPLS",
       sub = "entre 2005 et 2019", x = 'valeurs absolues des différences')
## Warning in self$trans$transform(x): Production de NaN

## Warning in self$trans$transform(x): Transformation introduced infinite values in
## continuous x-axis
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 20 rows containing non-finite values (`stat_bin()`).

# les différences entre les données des bilans annuels et du fichier rpls
res_4 = concat_diff_ann(communes_soumises_06_21, rpls_const_4)
## [1] "La différence entre la variation du nombre de logements sociaux entre les premiers janvier 2005 et 2020 et le nombre de constructions de logements sociaux dans le fichier rpls :"
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  -747.0     8.0    35.0   240.5    93.0 65704.0 
##    0%   10%   20%   30%   40%   50%   60%   70%   80%   90%  100% 
##  -747    -6     4    12    23    35    51    75   120   212 65704
boxplot(res_4$diff_ann_rpls, ylab = "différences",
        main = "Différences entre les variations et les constructions de LLS",
        col = 'lightpink')

boxplot(res_4$diff_ann_rpls[res_4$diff_ann_rpls<3000], ylab = "différences",
        main = "Différences entre les variations et les constructions de LLS",
        sub = "sans les 4 valeurs supérieurs à 3000", col = 'lightpink')

hist(res_4$diff_ann_rpls[res_4$diff_ann_rpls<3000],
     xlab = "valeur absolue des différences",
     main = "Différences entre les variations et les constructions de LLS",
     sub = "sans les 4 valeurs supérieurs à 3000", breaks = 30, 
     col = 'lightpink')

ggplot(res_4, aes(x = diff_ann_rpls)) + 
  geom_histogram(color = 'darkgrey', fill = 'lightpink') + scale_x_log10() +
  labs(title = "Différences entre les variations et les constructions de LLS",
       subtitle = "entre 2005 et 2019", x = 'valeurs absolues des différences')
## Warning in self$trans$transform(x): Production de NaN
## Warning: Transformation introduced infinite values in continuous x-axis
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 82 rows containing non-finite values (`stat_bin()`).

# les différences entre les données des bilans triennaux et du fichier rpls
res_4_tri = concat_diff_tri(communes_soumises_05_19_tri, rpls_const_4_tri)
## [1] "La différence entre les nombre de constructions de logements sociaux des bilans triennaux de la loi SRU et le nombre de constructions de logements sociaux dans le fichier rpls :"
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##  -489.0    97.0   191.0   489.7   348.5 63342.0      11 
##    0%   10%   20%   30%   40%   50%   60%   70%   80%   90%  100% 
##  -489    47    81   114   145   191   242   311   422   655 63342
boxplot(res_4_tri$diff_tri_rpls, ylab = "différences", col = 'lightblue',
        main = "Différences entres les constructions LLS des bilans triennaux et RPLS")

boxplot(res_4_tri$diff_tri_rpls[res_4_tri$diff_tri_rpls<5000],
        ylab = "différences", col = 'lightblue',
        main = "Différences entres les constructions LLS des bilans triennaux et RPLS",
        sub = "sans 5 valeurs supérieurs à 5000")

hist(res_4_tri$diff_tri_rpls[res_4_tri$diff_tri_rpls<5000], col = 'lightblue',
        main = "Différences entres les constructions LLS des bilans triennaux et RPLS",
        sub = "sans 5 valeurs supérieurs à 5000", breaks = 25,
     xlab = "différences")

ggplot(res_4_tri, aes(x = diff_tri_rpls)) + 
  geom_histogram(color = 'darkgrey', fill = 'lightblue') + scale_x_log10() +
  labs(title = "Différences entres les constructions LLS des bilans triennaux et RPLS",
       sub = "entre 2005 et 2019", x = 'valeurs absolues des différences')
## Warning in self$trans$transform(x): Production de NaN

## Warning in self$trans$transform(x): Transformation introduced infinite values in
## continuous x-axis
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 20 rows containing non-finite values (`stat_bin()`).

boxplot(res_1$diff_ann_rpls, 
        res_2$diff_ann_rpls,
        res_3$diff_ann_rpls,
        res_4$diff_ann_rpls,
        xlab = "différences", horizontal = TRUE, ylab = "versions",
        names = c(1, 2, 3, 4),
        main = "Différences entre les variations et les constructions de LLS",
        col = 'lightpink')

Les 4 valeurs les plus extrêmes pour les différentes versions sont des valeurs des villes de Paris, Lyon, Marseille et Annecy. En effet, Paris, Marseille et Lyon ont des effectis de logements beaucoup plus grands que les autres villes de France, elles ont ainsi des chiffres proportionnels à leur taille. Annecy est issue de la fusion de 6 communes depuis le premier janvier 2017, il y a donc des grandes différences dans les nombres de constructions et le nombre de logements locatifs sociaux car il y a un changement durant la période couverte des logements locatifs sociaux.

boxplot(res_1_tri$diff_tri_rpls, 
        res_2_tri$diff_tri_rpls,
        res_3_tri$diff_tri_rpls,
        res_4_tri$diff_tri_rpls,
        xlab = "différences", horizontal = TRUE, ylab = "versions",
        names = c(1, 2, 3, 4),
        main = "Différences entre les constructions de LLS selon RPLS et SRU",
        col = 'lightblue')

Pour les différences entre les données de constructions de logements sociaux des bilans triennaux et du fichier RPLS, on retrouve les 3 villes Paris, Lyon, Marseille dans les valeurs les plus extrêmes, auxquelles s’ajoute Nice et Bordeaux. Ces 5 villes sont parmi les plus grandes de France.

boxplot(res_1$diff_ann_rpls[res_1$diff_ann_rpls<3000], 
        res_2$diff_ann_rpls[res_2$diff_ann_rpls<2000],
        res_3$diff_ann_rpls[res_3$diff_ann_rpls<3000],
        res_4$diff_ann_rpls[res_4$diff_ann_rpls<3000],
        xlab = "différences", horizontal = TRUE, ylab = "versions",
        names = c(1, 2, 3, 4),
        main = "Différences entre les variations et les constructions de LLS",
        sub = "sans les 4 valeurs supérieures à 2000", col = 'lightpink')

boxplot(res_1_tri$diff_tri_rpls[res_1_tri$diff_tri_rpls<5000], 
        res_2_tri$diff_tri_rpls[res_2_tri$diff_tri_rpls<5000],
        res_3_tri$diff_tri_rpls[res_3_tri$diff_tri_rpls<5000],
        res_4_tri$diff_tri_rpls[res_4_tri$diff_tri_rpls<5000],
        xlab = "différences", horizontal = TRUE, ylab = "versions",
        names = c(1, 2, 3, 4),
        main = "Différences entre les constructions de LLS selon SRU et RPLS",
        sub = "sans les 5 valeurs supérieures à 5000", col = 'lightblue')

par(mfrow = c(2, 2), mar = c(4, 1, 1, 1), oma = c(2, 2, 2, 1))
hist(res_1$diff_ann_rpls[res_1$diff_ann_rpls<3000], col = 'lightpink',
        main = "version 1", breaks = 25, cex.lab = 0.8, cex.main = 1,
     xlab = "différences")
hist(res_2$diff_ann_rpls[res_2$diff_ann_rpls<2000], col = 'lightpink',
        main = "version 2", breaks = 25, cex.lab = 0.8, cex.main = 1,
     xlab = "différences")
hist(res_3$diff_ann_rpls[res_3$diff_ann_rpls<3000], col = 'lightpink',
        main = "version 3", breaks = 25, cex.lab = 0.8, cex.main = 1,
     xlab = "différences")
hist(res_4$diff_ann_rpls[res_4$diff_ann_rpls<3000], col = 'lightpink',
        main = "version 4", breaks = 25, cex.lab = 0.8, cex.main = 1,
     xlab = "différences")
title(main = "Différences entre les variations LLS des bilans SRU et les construction RPLS",
      sub = "sans 4 valeurs supérieures à 2000", outer = TRUE, line = 1)

par(mfrow = c(2, 2), mar = c(4, 1, 1, 1), oma = c(2, 2, 2, 1))
hist(res_1_tri$diff_tri_rpls[res_1_tri$diff_tri_rpls<5000], col = 'lightblue',
        main = "version 1", breaks = 25, cex.lab = 0.8, cex.main = 1,
     xlab = "différences")
hist(res_2_tri$diff_tri_rpls[res_2_tri$diff_tri_rpls<5000], col = 'lightblue',
        main = "version 2", breaks = 25, cex.lab = 0.8, cex.main = 1,
     xlab = "différences")
hist(res_3_tri$diff_tri_rpls[res_3_tri$diff_tri_rpls<5000], col = 'lightblue',
        main = "version 3", breaks = 25, cex.lab = 0.8, cex.main = 1,
     xlab = "différences")
hist(res_4_tri$diff_tri_rpls[res_4_tri$diff_tri_rpls<5000], col = 'lightblue',
        main = "version 4", breaks = 25, cex.lab = 0.8, cex.main = 1,
     xlab = "différences")
title(main = "Différences entre les constructions LLS des bilans triennaux et RPLS",
      sub = "sans 5 valeurs supérieures à 5000", outer = TRUE, line = 1)

Les résultats des 4 versions sont très similaires.

Les tailles des communes ont une grande importance sur les différences entre les données des logements sociaux des bilans de la loi SRU et du fichier RPLS. On va donc calculer des pourcentages de ces différences par rapport au nombre de logements sociaux construits selon le fichier rpls.

Il existe deux communes qui n’ont pas de logements sociaux construits selon le fichier rpls entre 2005 et 2019, il s’agit de 13062 et 77249. On ne pourra pas diviser par le nombre de logements construits selon RPLS pour ces deux communes. On les enlève donc des données.

res_1 = res_1[res_1$rpls != 0,]
res_2 = res_2[res_2$rpls != 0,]
res_3 = res_3[res_3$rpls != 0,]
res_4 = res_4[res_4$rpls != 0,]

res_1_tri = res_1_tri[res_1_tri$rpls != 0,]
res_2_tri = res_2_tri[res_2_tri$rpls != 0,]
res_3_tri = res_3_tri[res_3_tri$rpls != 0,]
res_4_tri = res_4_tri[res_4_tri$rpls != 0,]
# pour les différences entre les données SRU annuelles et RPLS
res_1$diff_pourc_ann_rpls = res_1$diff_ann_rpls / res_1$rpls
summary(res_1$diff_pourc_ann_rpls)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## -1.00000  0.03712  0.16012  0.42447  0.45409 36.66667
quantile(res_1$diff_pourc_ann_rpls, seq(0, 1, 0.1), na.rm = TRUE)
##          0%         10%         20%         30%         40%         50% 
## -1.00000000 -0.04490670  0.01521912  0.05933783  0.10721718  0.16012085 
##         60%         70%         80%         90%        100% 
##  0.23597818  0.36535948  0.54891041  0.85897275 36.66666667
boxplot(res_1$diff_pourc_ann_rpls, 
        main = "Différences des données annuelles SRU et RPLS sur les LLS",
        sub = "sur le nombre de LLS construits selon RPLS",
        col = 'lightpink')

boxplot(res_1$diff_pourc_ann_rpls[res_1$diff_pourc_ann_rpls<10], 
        main = "Différences des données annuelles SRU et RPLS sur les LLS",
        sub = "sur le nombre de LLS construits selon RPLS sans 1 valeur supérieure à 10",
        col = 'lightpink')

hist(res_1$diff_pourc_ann_rpls[res_1$diff_pourc_ann_rpls<10], breaks = 25,
     col = 'lightpink', xlab = 'différences/rpls',
     main = "Différences des données annuelles SRU et RPLS sur les LLS",
     sub = "sur le nombre de LLS construits selon RPLS sans 1 valeur supérieur à 10")

# pour les différences entre les données SRU triennales et RPLS
res_1_tri$diff_pourc_tri_rpls = res_1_tri$diff_tri_rpls / res_1_tri$rpls
summary(res_1_tri$diff_pourc_tri_rpls)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
## -0.4681  0.4945  0.8663  1.5186  1.4972 82.0000      11
quantile(res_1_tri$diff_pourc_tri_rpls, seq(0, 1, 0.1), na.rm = TRUE)
##         0%        10%        20%        30%        40%        50%        60% 
## -0.4680851  0.2517205  0.4169125  0.5679915  0.7144432  0.8663102  1.0559357 
##        70%        80%        90%       100% 
##  1.3294795  1.7306710  2.6912587 82.0000000
boxplot(res_1_tri$diff_pourc_tri_rpls, col = 'lightblue',
        main = "Différences des données triennales SRU et RPLS sur les LLS",
        sub = "sur le nombre de LLS construits selon RPLS")

boxplot(res_1_tri$diff_pourc_tri_rpls[res_1_tri$diff_pourc_tri_rpls<10],
        col = 'lightblue',
        main = "Différences des données triennales SRU et RPLS sur les LLS",
        sub = "sur le nombre de LLS construits selon RPLS sans 6 valeur supérieures à 10")

hist(res_1_tri$diff_pourc_tri_rpls[res_1_tri$diff_pourc_tri_rpls<10],
        col = 'lightblue', breaks = 30, xlab = 'différences/rpls',
        main = "Différences des données triennales SRU et RPLS sur les LLS",
        sub = "sur le nombre de LLS construits selon RPLS sans 6 valeur supérieures à 10")

# pour les différences entre les données SRU annuelles et RPLS
res_2$diff_pourc_ann_rpls = res_2$diff_ann_rpls / res_2$rpls
summary(res_2$diff_pourc_ann_rpls)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## -1.0000  0.0349  0.1591  0.4186  0.4541 36.6667
quantile(res_2$diff_pourc_ann_rpls, seq(0, 1, 0.1), na.rm = TRUE)
##           0%          10%          20%          30%          40%          50% 
## -1.000000000 -0.053155286  0.008187135  0.057254138  0.105930577  0.159090909 
##          60%          70%          80%          90%         100% 
##  0.232214419  0.365359477  0.544074507  0.858972746 36.666666667
boxplot(res_2$diff_pourc_ann_rpls, 
        main = "Différences des données annuelles SRU et RPLS sur les LLS",
        sub = "sur le nombre de LLS construits selon RPLS",
        col = 'lightpink')

boxplot(res_2$diff_pourc_ann_rpls[res_2$diff_pourc_ann_rpls<10], 
        main = "Différences des données annuelles SRU et RPLS sur les LLS",
        sub = "sur le nombre de LLS construits selon RPLS sans 1 valeur supérieure à 10",
        col = 'lightpink')

hist(res_2$diff_pourc_ann_rpls[res_2$diff_pourc_ann_rpls<10], breaks = 25,
     col = 'lightpink', xlab = 'différences/rpls',
     main = "Différences des données annuelles SRU et RPLS sur les LLS",
     sub = "sur le nombre de LLS construits selon RPLS sans 1 valeur supérieur à 10")

# pour les différences entre les données SRU triennales et RPLS
res_2_tri$diff_pourc_tri_rpls = res_2_tri$diff_tri_rpls / res_2_tri$rpls
summary(res_2_tri$diff_pourc_tri_rpls)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
## -0.4681  0.4935  0.8615  1.5094  1.4872 82.0000      11
quantile(res_2_tri$diff_pourc_tri_rpls, seq(0, 1, 0.1), na.rm = TRUE)
##         0%        10%        20%        30%        40%        50%        60% 
## -0.4680851  0.2517205  0.4121795  0.5593600  0.7019279  0.8615385  1.0456187 
##        70%        80%        90%       100% 
##  1.3242553  1.7037471  2.6912587 82.0000000
boxplot(res_2_tri$diff_pourc_tri_rpls, col = 'lightblue',
        main = "Différences des données triennales SRU et RPLS sur les LLS",
        sub = "sur le nombre de LLS construits selon RPLS")

boxplot(res_2_tri$diff_pourc_tri_rpls[res_2_tri$diff_pourc_tri_rpls<10],
        col = 'lightblue',
        main = "Différences des données triennales SRU et RPLS sur les LLS",
        sub = "sur le nombre de LLS construits selon RPLS sans 6 valeur supérieures à 10")

hist(res_2_tri$diff_pourc_tri_rpls[res_2_tri$diff_pourc_tri_rpls<10],
        col = 'lightblue', breaks = 30, xlab = 'différences/rpls',
        main = "Différences des données triennales SRU et RPLS sur les LLS",
        sub = "sur le nombre de LLS construits selon RPLS sans 6 valeur supérieures à 10")

# pour les différences entre les données SRU annuelles et RPLS
res_3$diff_pourc_ann_rpls = res_3$diff_ann_rpls / res_3$rpls
summary(res_3$diff_pourc_ann_rpls)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## -1.00000  0.03957  0.16538  0.43262  0.46055 36.66667
quantile(res_3$diff_pourc_ann_rpls, seq(0, 1, 0.1), na.rm = TRUE)
##          0%         10%         20%         30%         40%         50% 
## -1.00000000 -0.03229865  0.02014575  0.06276627  0.10764313  0.16538462 
##         60%         70%         80%         90%        100% 
##  0.24115514  0.36535948  0.56253771  0.94761905 36.66666667
boxplot(res_3$diff_pourc_ann_rpls, 
        main = "Différences des données annuelles SRU et RPLS sur les LLS",
        sub = "sur le nombre de LLS construits selon RPLS",
        col = 'lightpink')

boxplot(res_3$diff_pourc_ann_rpls[res_3$diff_pourc_ann_rpls<10], 
        main = "Différences des données annuelles SRU et RPLS sur les LLS",
        sub = "sur le nombre de LLS construits selon RPLS sans 1 valeur supérieure à 10",
        col = 'lightpink')

hist(res_3$diff_pourc_ann_rpls[res_3$diff_pourc_ann_rpls<10], breaks = 25,
     col = 'lightpink', xlab = 'différences/rpls',
     main = "Différences des données annuelles SRU et RPLS sur les LLS",
     sub = "sur le nombre de LLS construits selon RPLS sans 1 valeur supérieure à 10")

# pour les différences entre les données SRU triennales et RPLS
res_3_tri$diff_pourc_tri_rpls = res_3_tri$diff_tri_rpls / res_3_tri$rpls
summary(res_3_tri$diff_pourc_tri_rpls)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
## -0.4681  0.5042  0.8796  1.5352  1.5448 82.0000      11
quantile(res_3_tri$diff_pourc_tri_rpls, seq(0, 1, 0.1), na.rm = TRUE)
##         0%        10%        20%        30%        40%        50%        60% 
## -0.4680851  0.2584196  0.4227444  0.5691094  0.7166704  0.8796296  1.0575360 
##        70%        80%        90%       100% 
##  1.3310924  1.7472133  2.7862422 82.0000000
boxplot(res_3_tri$diff_pourc_tri_rpls, col = 'lightblue',
        main = "Différences des données triennales SRU et RPLS sur les LLS",
        sub = "sur le nombre de LLS construits selon RPLS")

boxplot(res_3_tri$diff_pourc_tri_rpls[res_3_tri$diff_pourc_tri_rpls<10],
        col = 'lightblue',
        main = "Différences des données triennales SRU et RPLS sur les LLS",
        sub = "sur le nombre de LLS construits selon RPLS sans 6 valeur supérieures à 10")

hist(res_3_tri$diff_pourc_tri_rpls[res_3_tri$diff_pourc_tri_rpls<10],
        col = 'lightblue', breaks = 30, xlab = 'différences/rpls',
        main = "Différences des données triennales SRU et RPLS sur les LLS",
        sub = "sur le nombre de LLS construits selon RPLS sans 6 valeur supérieures à 10")

# pour les différences entre les données SRU annuelles et RPLS
res_4$diff_pourc_ann_rpls = res_4$diff_ann_rpls / res_4$rpls
summary(res_4$diff_pourc_ann_rpls)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## -1.00000  0.03957  0.16538  0.43262  0.46055 36.66667
quantile(res_4$diff_pourc_ann_rpls, seq(0, 1, 0.1), na.rm = TRUE)
##          0%         10%         20%         30%         40%         50% 
## -1.00000000 -0.03229865  0.02014575  0.06276627  0.10764313  0.16538462 
##         60%         70%         80%         90%        100% 
##  0.24115514  0.36535948  0.56253771  0.94761905 36.66666667
boxplot(res_4$diff_pourc_ann_rpls, 
        main = "Différences des données annuelles SRU et RPLS sur les LLS",
        sub = "sur le nombre de LLS construits selon RPLS",
        col = 'lightpink')

boxplot(res_4$diff_pourc_ann_rpls[res_4$diff_pourc_ann_rpls<10], 
        main = "Différences des données annuelles SRU et RPLS sur les LLS",
        sub = "sur le nombre de LLS construits selon RPLS sans 1 valeur supérieure à 10",
        col = 'lightpink')

hist(res_4$diff_pourc_ann_rpls[res_4$diff_pourc_ann_rpls<10], breaks = 25,
     col = 'lightpink', xlab = 'différences/rpls',
     main = "Différences des données annuelles SRU et RPLS sur les LLS",
     sub = "sur le nombre de LLS construits selon RPLS sans 1 valeur supérieur à 10")

# pour les différences entre les données SRU triennales et RPLS
res_4_tri$diff_pourc_tri_rpls = res_4_tri$diff_tri_rpls / res_4_tri$rpls
summary(res_4_tri$diff_pourc_tri_rpls)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
## -0.4681  0.5042  0.8796  1.5352  1.5448 82.0000      11
quantile(res_4_tri$diff_pourc_tri_rpls, seq(0, 1, 0.1), na.rm = TRUE)
##         0%        10%        20%        30%        40%        50%        60% 
## -0.4680851  0.2584196  0.4227444  0.5691094  0.7166704  0.8796296  1.0575360 
##        70%        80%        90%       100% 
##  1.3310924  1.7472133  2.7862422 82.0000000
boxplot(res_4_tri$diff_pourc_tri_rpls, col = 'lightblue',
        main = "Différences des données triennales SRU et RPLS sur les LLS",
        sub = "sur le nombre de LLS construits selon RPLS")

boxplot(res_4_tri$diff_pourc_tri_rpls[res_4_tri$diff_pourc_tri_rpls<10],
        col = 'lightblue',
        main = "Différences des données triennales SRU et RPLS sur les LLS",
        sub = "sur le nombre de LLS construits selon RPLS sans 6 valeur supérieures à 10")

hist(res_4_tri$diff_pourc_tri_rpls[res_4_tri$diff_pourc_tri_rpls<10],
        col = 'lightblue', breaks = 30, xlab = 'différences/rpls',
        main = "Différences des données triennales SRU et RPLS sur les LLS",
        sub = "sur le nombre de LLS construits selon RPLS sans 6 valeur supérieures à 10")

boxplot(res_1$diff_pourc_ann_rpls, 
        res_2$diff_pourc_ann_rpls, 
        res_3$diff_pourc_ann_rpls, 
        res_4$diff_pourc_ann_rpls, 
        main = "Différences des données annuelles SRU et RPLS sur les LLS",
        sub = "sur le nombre de LLS construits selon RPLS",
        col = 'lightpink', names = c(1, 2, 3, 4), horizontal = TRUE)

Il y a une valeur égale à 36,67, qui correspond à la commune 06011.

boxplot(res_1$diff_pourc_ann_rpls[res_1$diff_pourc_ann_rpls<10], 
        res_2$diff_pourc_ann_rpls[res_2$diff_pourc_ann_rpls<10], 
        res_3$diff_pourc_ann_rpls[res_3$diff_pourc_ann_rpls<10], 
        res_4$diff_pourc_ann_rpls[res_4$diff_pourc_ann_rpls<10], 
        main = "Différences des données annuelles SRU et RPLS sur les LLS",
        sub = "sur le nombre de LLS construits selon RPLS",
        col = 'lightpink', names = c(1, 2, 3, 4), horizontal = TRUE)

par(mfrow = c(2, 2), oma = c(2, 2, 2, 2), mar = c(4, 1, 1, 1))
hist(res_1$diff_pourc_ann_rpls[res_1$diff_pourc_ann_rpls<10], breaks = 25,
     col = 'lightpink', xlab = 'différences/rpls',
     main = "version 1", cex.lab = 0.8, cex.main = 1)
hist(res_2$diff_pourc_ann_rpls[res_2$diff_pourc_ann_rpls<10], breaks = 25,
     col = 'lightpink', xlab = 'différences/rpls',
     main = "version 2", cex.lab = 0.8, cex.main = 1)
hist(res_3$diff_pourc_ann_rpls[res_3$diff_pourc_ann_rpls<10], breaks = 25,
     col = 'lightpink', xlab = 'différences/rpls',
     main = "version 3", cex.lab = 0.8, cex.main = 1)
hist(res_4$diff_pourc_ann_rpls[res_4$diff_pourc_ann_rpls<10], breaks = 25,
     col = 'lightpink', xlab = 'différences/rpls',
     main = "version 4", cex.lab = 0.8, cex.main = 1)
title(main = "Différences des données annuelles SRU et RPLS sur les LLS",
      sub = "sur le nombre de constructions RPLS", outer = TRUE, line = 1)

boxplot(res_1_tri$diff_pourc_tri_rpls,
        res_2_tri$diff_pourc_tri_rpls,
        res_3_tri$diff_pourc_tri_rpls,
        res_4_tri$diff_pourc_tri_rpls, col = 'lightblue', names = c(1, 2, 3, 4),
        main = "Différences des données triennales SRU et RPLS sur les LLS",
        sub = "sur le nombre de LLS construits selon RPLS")

boxplot(res_1_tri$diff_pourc_tri_rpls[res_1_tri$diff_pourc_tri_rpls<10],
        res_2_tri$diff_pourc_tri_rpls[res_2_tri$diff_pourc_tri_rpls<10],
        res_3_tri$diff_pourc_tri_rpls[res_3_tri$diff_pourc_tri_rpls<10],
        res_4_tri$diff_pourc_tri_rpls[res_4_tri$diff_pourc_tri_rpls<10],
        col = 'lightblue', names = c(1, 2, 3, 4),
        main = "Différences des données triennales SRU et RPLS sur les LLS",
        sub = "sur le nombre de LLS construits selon RPLS sans 6 valeurs supérieures à 10")

par(mfrow = c(2, 2), oma = c(2, 2, 2, 2), mar = c(4, 1, 1, 1))
hist(res_1_tri$diff_pourc_tri_rpls[res_1_tri$diff_pourc_tri_rpls<10],
        col = 'lightblue', breaks = 30, xlab = 'différences/rpls',
        main = 'version 1', cex.lab = 0.8, cex.main = 1)
hist(res_2_tri$diff_pourc_tri_rpls[res_2_tri$diff_pourc_tri_rpls<10],
        col = 'lightblue', breaks = 30, xlab = 'différences/rpls',
        main = 'version 2', cex.lab = 0.8, cex.main = 1)
hist(res_3_tri$diff_pourc_tri_rpls[res_3_tri$diff_pourc_tri_rpls<10],
        col = 'lightblue', breaks = 30, xlab = 'différences/rpls',
        main = 'version 3', cex.lab = 0.8, cex.main = 1)
hist(res_4_tri$diff_pourc_tri_rpls[res_4_tri$diff_pourc_tri_rpls<10],
        col = 'lightblue', breaks = 30, xlab = 'différences/rpls',
        main = 'version 4', cex.lab = 0.8, cex.main = 1)
title(main = "Différences des données triennales SRU et RPLS",
      sub = "sur les LLS construits selon RPLS sans 6 valeurs supérieures à 10",
      outer = TRUE, line = 1)

# View(res_1[, c(1, ncol(communes_soumises_06_21) - 1, ncol(communes_soumises_06_21), ncol(res_1) - 2, ncol(res_1) - 1, ncol(res_1))], title = "version 1")
# View(res_1[, c(1, ncol(communes_soumises_06_21) - 1, ncol(communes_soumises_06_21), ncol(res_1) - 4, ncol(res_1) - 1, ncol(res_1))], title = "version 1")
# View(res_2[, c(1, ncol(communes_soumises_06_21) - 1, ncol(communes_soumises_06_21), ncol(res_1) - 4, ncol(res_1) - 1, ncol(res_1))], title = "version 2")
# View(res_3[, c(1, ncol(communes_soumises_06_21) - 1, ncol(communes_soumises_06_21), ncol(res_1) - 4, ncol(res_1) - 1, ncol(res_1))], title = "version 3")
# View(res_4[, c(1, ncol(communes_soumises_06_21) - 1, ncol(communes_soumises_06_21), ncol(res_1) - 4, ncol(res_1) - 1, ncol(res_1))], title = "version 4")

Communes entrantes et sortantes des bilans SRU

Bilans annuels

# les communes sortant des bilans annuels entre ceux de 2004 et 2005
# print("2004 sortantes")
com_sort_04_05 = sqldf("SELECT code_commune FROM co_so_04 EXCEPT SELECT code_commune FROM co_so_05")

# print("2005 sortantes")
# les communes sortant des bilans annuels entre ceux de 2005 et 2006
com_sort_05_06 = sqldf("SELECT code_commune FROM co_so_05 EXCEPT SELECT code_commune FROM co_so_06")

# print("2006 sortantes")
# les communes sortant des bilans annuels entre ceux de 2006 et 2007
com_sort_06_07 = sqldf("SELECT code_commune FROM co_so_06 EXCEPT SELECT code_commune FROM co_so_07")

# print("2007 sortantes")
# les communes sortant des bilans annuels entre ceux de 2007 et 2008
com_sort_07_08 = sqldf("SELECT code_commune FROM co_so_07 EXCEPT SELECT code_commune FROM co_so_08")

# print("2008 sortantes")
# les communes sortant des bilans annuels entre ceux de 2008 et 2009
com_sort_08_09 = sqldf("SELECT code_commune FROM co_so_08 EXCEPT SELECT code_commune FROM co_so_09")

# print("2009 sortantes")
# les communes sortant des bilans annuels entre ceux de 2009 et 2010
com_sort_09_10 = sqldf("SELECT code_commune FROM co_so_09 EXCEPT SELECT code_commune FROM co_so_10")

# print("2010 sortantes")
# les communes sortant des bilans annuels entre ceux de 2010 et 2011
com_sort_10_11 = sqldf("SELECT code_commune FROM co_so_10 EXCEPT SELECT code_commune FROM co_so_11")

# print("2011 sortantes")
# les communes sortant des bilans annuels entre ceux de 2011 et 2012
com_sort_11_12 = sqldf("SELECT code_commune FROM co_so_11 EXCEPT SELECT code_commune FROM co_so_12")

# print("2012 sortantes")
# les communes sortant des bilans annuels entre ceux de 2012 et 2013
com_sort_12_13 = sqldf("SELECT code_commune FROM co_so_12 EXCEPT SELECT code_commune FROM co_so_13")

# print("2013 sortantes")
# les communes sortant des bilans annuels entre ceux de 2013 et 2014
com_sort_13_14 = sqldf("SELECT code_commune FROM co_so_13 EXCEPT SELECT code_commune FROM co_so_14")

# print("2014 sortantes")
# les communes sortant des bilans annuels entre ceux de 2014 et 2015
com_sort_14_15 = sqldf("SELECT code_commune FROM co_so_14 EXCEPT SELECT code_commune FROM co_so_15")

# print("2015 sortantes")
# les communes sortant des bilans annuels entre ceux de 2015 et 2016
com_sort_15_16 = sqldf("SELECT code_commune FROM co_so_15 EXCEPT SELECT code_commune FROM co_so_16")

# print("2016 sortantes")
# les communes sortant des bilans annuels entre ceux de 2016 et 2017
com_sort_16_17 = sqldf("SELECT code_commune FROM co_so_16 EXCEPT SELECT code_commune FROM co_so_17")

# print("2017 sortantes")
# les communes sortant des bilans annuels entre ceux de 2017 et 2018
com_sort_17_18 = sqldf("SELECT code_commune FROM co_so_17 EXCEPT SELECT code_commune FROM co_so_18")

# print("2018 sortantes")
# les communes sortant des bilans annuels entre ceux de 2018 et 2019
com_sort_18_19 = sqldf("SELECT code_commune FROM co_so_18 EXCEPT SELECT code_commune FROM co_so_19")

# print("2019 sortantes")
# les communes sortant des bilans annuels entre ceux de 2019 et 2020
com_sort_19_20 = sqldf("SELECT code_commune FROM co_so_19 EXCEPT SELECT code_commune FROM co_so_20")

# print("2020 sortantes")
# les communes sortant des bilans annuels entre ceux de 2020 et 2021
com_sort_20_21 = sqldf("SELECT code_commune FROM co_so_20 EXCEPT SELECT code_commune FROM co_so_21")
# les communes entrant dans les bilans annuels entre ceux de 2004 et 2005
# print("2005 entrantes")
com_entr_04_05 = sqldf("SELECT code_commune FROM co_so_05 EXCEPT SELECT code_commune FROM co_so_04")

# print("2006 entrantes")
# les communes entrant dans les bilans annuels entre ceux de 2005 et 2006
com_entr_05_06 = sqldf("SELECT code_commune FROM co_so_06 EXCEPT SELECT code_commune FROM co_so_05")

# print("2007 entrantes")
# les communes entrant dans les bilans annuels entre ceux de 2006 et 2007
com_entr_06_07 = sqldf("SELECT code_commune FROM co_so_07 EXCEPT SELECT code_commune FROM co_so_06")

# print("2008 entrantes")
# les communes entrant dans les bilans annuels entre ceux de 2007 et 2008
com_entr_07_08 = sqldf("SELECT code_commune FROM co_so_08 EXCEPT SELECT code_commune FROM co_so_07")

# print("2009 entrantes")
# les communes entrant dans les bilans annuels entre ceux de 2008 et 2009
com_entr_08_09 = sqldf("SELECT code_commune FROM co_so_09 EXCEPT SELECT code_commune FROM co_so_08")

# print("2010 entrantes")
# les communes entrant dans les bilans annuels entre ceux de 2009 et 2010
com_entr_09_10 = sqldf("SELECT code_commune FROM co_so_10 EXCEPT SELECT code_commune FROM co_so_09")

# print("2011 entrantes")
# les communes entrant dans les bilans annuels entre ceux de 2010 et 2011
com_entr_10_11 = sqldf("SELECT code_commune FROM co_so_11 EXCEPT SELECT code_commune FROM co_so_10")

# print("2012 entrantes")
# les communes entrant dans les bilans annuels entre ceux de 2011 et 2012
com_entr_11_12 = sqldf("SELECT code_commune FROM co_so_12 EXCEPT SELECT code_commune FROM co_so_11")

# print("2013 entrantes")
# les communes entrant des bilans annuels entre ceux de 2012 et 2013
com_entr_12_13 = sqldf("SELECT code_commune FROM co_so_13 EXCEPT SELECT code_commune FROM co_so_12")

# print("2014 entrantes")
# les communes entrant dans les bilans annuels entre ceux de 2013 et 2014
com_entr_13_14 = sqldf("SELECT code_commune FROM co_so_14 EXCEPT SELECT code_commune FROM co_so_13")

# print("2015 entrantes")
# les communes entrant dans les bilans annuels entre ceux de 2014 et 2015
com_entr_14_15 = sqldf("SELECT code_commune FROM co_so_15 EXCEPT SELECT code_commune FROM co_so_14")

# print("2016 entrantes")
# les communes entrant dans les bilans annuels entre ceux de 2015 et 2016
com_entr_15_16 = sqldf("SELECT code_commune FROM co_so_16 EXCEPT SELECT code_commune FROM co_so_15")

# print("2017 entrantes")
# les communes entrant dans les bilans annuels entre ceux de 2016 et 2017
com_entr_16_17 = sqldf("SELECT code_commune FROM co_so_17 EXCEPT SELECT code_commune FROM co_so_16")

# print("2018 entrantes")
# les communes entrant dans les bilans annuels entre ceux de 2017 et 2018
com_entr_17_18 = sqldf("SELECT code_commune FROM co_so_18 EXCEPT SELECT code_commune FROM co_so_17")

# print("2019 entrantes")
# les communes entrant dans les bilans annuels entre ceux de 2018 et 2019
com_entr_18_19 = sqldf("SELECT code_commune FROM co_so_19 EXCEPT SELECT code_commune FROM co_so_18")

# print("2020 entrantes")
# les communes entrant dans les bilans annuels entre ceux de 2019 et 2020
com_entr_19_20 = sqldf("SELECT code_commune FROM co_so_20 EXCEPT SELECT code_commune FROM co_so_19")

# print("2021 entrantes")
# les communes entrant dans les des bilans annuels entre ceux de 2020 et 2021
com_entr_20_21 = sqldf("SELECT code_commune FROM co_so_21 EXCEPT SELECT code_commune FROM co_so_20")
# création d'un fichier avec des 0 et 1 en fonction de l'entrée des communes dans les bilans et des sorties
entrees_sorties_communes = c()
entrees_sorties_communes$code_commune = co_so_ann$code_commune

entrees_sorties_communes$entree_06 = co_so_ann$code_commune %in% co_so_06$code_commune
entrees_sorties_communes$entree_07 = co_so_ann$code_commune %in% com_entr_06_07$code_commune
entrees_sorties_communes$entree_08 = co_so_ann$code_commune %in% com_entr_07_08$code_commune
entrees_sorties_communes$entree_09 = co_so_ann$code_commune %in% com_entr_08_09$code_commune
entrees_sorties_communes$entree_10 = co_so_ann$code_commune %in% com_entr_09_10$code_commune
entrees_sorties_communes$entree_11 = co_so_ann$code_commune %in% com_entr_10_11$code_commune
entrees_sorties_communes$entree_12 = co_so_ann$code_commune %in% com_entr_11_12$code_commune
entrees_sorties_communes$entree_13 = co_so_ann$code_commune %in% com_entr_12_13$code_commune
entrees_sorties_communes$entree_14 = co_so_ann$code_commune %in% com_entr_13_14$code_commune
entrees_sorties_communes$entree_15 = co_so_ann$code_commune %in% com_entr_14_15$code_commune
entrees_sorties_communes$entree_16 = co_so_ann$code_commune %in% com_entr_15_16$code_commune
entrees_sorties_communes$entree_17 = co_so_ann$code_commune %in% com_entr_16_17$code_commune
entrees_sorties_communes$entree_18 = co_so_ann$code_commune %in% com_entr_17_18$code_commune
entrees_sorties_communes$entree_19 = co_so_ann$code_commune %in% com_entr_18_19$code_commune
entrees_sorties_communes$entree_20 = co_so_ann$code_commune %in% com_entr_19_20$code_commune
entrees_sorties_communes$entree_21 = co_so_ann$code_commune %in% com_entr_20_21$code_commune

entrees_sorties_communes$sortie_04 = co_so_ann$code_commune %in% com_sort_04_05$code_commune
entrees_sorties_communes$sortie_05 = co_so_ann$code_commune %in% com_sort_05_06$code_commune
entrees_sorties_communes$sortie_06 = co_so_ann$code_commune %in% com_sort_06_07$code_commune
entrees_sorties_communes$sortie_07 = co_so_ann$code_commune %in% com_sort_07_08$code_commune
entrees_sorties_communes$sortie_08 = co_so_ann$code_commune %in% com_sort_08_09$code_commune
entrees_sorties_communes$sortie_09 = co_so_ann$code_commune %in% com_sort_09_10$code_commune
entrees_sorties_communes$sortie_10 = co_so_ann$code_commune %in% com_sort_10_11$code_commune
entrees_sorties_communes$sortie_11 = co_so_ann$code_commune %in% com_sort_11_12$code_commune
entrees_sorties_communes$sortie_12 = co_so_ann$code_commune %in% com_sort_12_13$code_commune
entrees_sorties_communes$sortie_13 = co_so_ann$code_commune %in% com_sort_13_14$code_commune
entrees_sorties_communes$sortie_14 = co_so_ann$code_commune %in% com_sort_14_15$code_commune
entrees_sorties_communes$sortie_15 = co_so_ann$code_commune %in% com_sort_15_16$code_commune
entrees_sorties_communes$sortie_16 = co_so_ann$code_commune %in% com_sort_16_17$code_commune
entrees_sorties_communes$sortie_17 = co_so_ann$code_commune %in% com_sort_17_18$code_commune
entrees_sorties_communes$sortie_18 = co_so_ann$code_commune %in% com_sort_18_19$code_commune
entrees_sorties_communes$sortie_19 = co_so_ann$code_commune %in% com_sort_19_20$code_commune
entrees_sorties_communes$sortie_20 = co_so_ann$code_commune %in% com_sort_20_21$code_commune

entrees_sorties_communes = as.data.frame(entrees_sorties_communes)
# création d'un fichier avec des 0 et des 1 en fonction des présences des communes
# Une colonne par année
# Une ligne par commune
presence_communes = c()
presence_communes$code_commune = co_so_ann$code_commune
presence_communes$pres_06 = co_so_ann$code_commune %in% co_so_06$code_commune
presence_communes$pres_07 = co_so_ann$code_commune %in% co_so_07$code_commune
presence_communes$pres_08 = co_so_ann$code_commune %in% co_so_08$code_commune
presence_communes$pres_09 = co_so_ann$code_commune %in% co_so_09$code_commune
presence_communes$pres_10 = co_so_ann$code_commune %in% co_so_10$code_commune
presence_communes$pres_11 = co_so_ann$code_commune %in% co_so_11$code_commune
presence_communes$pres_12 = co_so_ann$code_commune %in% co_so_12$code_commune
presence_communes$pres_13 = co_so_ann$code_commune %in% co_so_13$code_commune
presence_communes$pres_14 = co_so_ann$code_commune %in% co_so_14$code_commune
presence_communes$pres_15 = co_so_ann$code_commune %in% co_so_15$code_commune
presence_communes$pres_16 = co_so_ann$code_commune %in% co_so_16$code_commune
presence_communes$pres_17 = co_so_ann$code_commune %in% co_so_17$code_commune
presence_communes$pres_18 = co_so_ann$code_commune %in% co_so_18$code_commune
presence_communes$pres_19 = co_so_ann$code_commune %in% co_so_19$code_commune
presence_communes$pres_20 = co_so_ann$code_commune %in% co_so_20$code_commune
presence_communes$pres_21 = co_so_ann$code_commune %in% co_so_21$code_commune
presence_communes = as.data.frame(presence_communes)

# une colonne pour le nombre d'année de présence dans les bilans annuels
presence_communes$nb_annee =
  presence_communes$pres_06 +
  presence_communes$pres_07 + presence_communes$pres_08 + presence_communes$pres_09 +
  presence_communes$pres_10 + presence_communes$pres_11 + presence_communes$pres_12 +
  presence_communes$pres_13 + presence_communes$pres_15 + presence_communes$pres_16 +
  presence_communes$pres_14 + presence_communes$pres_17 + presence_communes$pres_18 +
  presence_communes$pres_19 + presence_communes$pres_20 + presence_communes$pres_21
# la première année de présence de la commune
for (i in 1:length(co_so_ann$code_commune)){
  presence_communes$premiere_annee[i] = 2021
  if (presence_communes$pres_20[i] == 1){presence_communes$premiere_annee[i] = 2020}
  if (presence_communes$pres_19[i] == 1){presence_communes$premiere_annee[i] = 2019}
  if (presence_communes$pres_18[i] == 1){presence_communes$premiere_annee[i] = 2018}
  if (presence_communes$pres_17[i] == 1){presence_communes$premiere_annee[i] = 2017}
  if (presence_communes$pres_16[i] == 1){presence_communes$premiere_annee[i] = 2016}
  if (presence_communes$pres_15[i] == 1){presence_communes$premiere_annee[i] = 2015}
  if (presence_communes$pres_14[i] == 1){presence_communes$premiere_annee[i] = 2014}
  if (presence_communes$pres_13[i] == 1){presence_communes$premiere_annee[i] = 2013}
  if (presence_communes$pres_12[i] == 1){presence_communes$premiere_annee[i] = 2012}
  if (presence_communes$pres_11[i] == 1){presence_communes$premiere_annee[i] = 2011}
  if (presence_communes$pres_10[i] == 1){presence_communes$premiere_annee[i] = 2010}
  if (presence_communes$pres_09[i] == 1){presence_communes$premiere_annee[i] = 2009}
  if (presence_communes$pres_08[i] == 1){presence_communes$premiere_annee[i] = 2008}
  if (presence_communes$pres_07[i] == 1){presence_communes$premiere_annee[i] = 2007}
  if (presence_communes$pres_06[i] == 1){presence_communes$premiere_annee[i] = 2006}
}

table(presence_communes$premiere_annee, presence_communes$nb_annee)
##       
##          0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16
##   2006   0   4  11   4   8   8  10  22  11  10  12  12  31  22  27  43 509
##   2007   0   0   1   0   1   0   0   0   0   0   0   0   0   1   0   0   0
##   2008   0   3   3   1   6   3   6   4   6   9  33   4  16  14 112   0   0
##   2009   0   0   0   0   0   0   1   0   0   1   0   0   2   0   0   0   0
##   2010   0   3   0   1   4   9   3   3  13   4   6   5  32   0   0   0   0
##   2011   0   1   0   0   0   0   1   2   0   5   1  13   0   0   0   0   0
##   2012   0   0   1   0   3   0   2   0   3   2  11   0   0   0   0   0   0
##   2013   0   6   1   2   2   8   2   8   6  48   0   0   0   0   0   0   0
##   2014   0   4   2   6  18  12   8   8  54   0   0   0   0   0   0   0   0
##   2015   0   1   4  16   0   5   2  19   0   0   0   0   0   0   0   0   0
##   2016   0   2  12   0   2   2   7   0   0   0   0   0   0   0   0   0   0
##   2017   0  14   0   7   1   8   0   0   0   0   0   0   0   0   0   0   0
##   2018   0   0   8   1  23   0   0   0   0   0   0   0   0   0   0   0   0
##   2019   0   6   1  12   0   0   0   0   0   0   0   0   0   0   0   0   0
##   2020   0   1  36   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   2021   8  16   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0

Il y a 900 communes sur la diagonale, c’est-à-dire qu’il y a 900 communes lorsqu’elles commencent à être soumises à la loi SRU le restent jusqu’au dernier bilan annuel : celui de 2021. On va s’interresser aux communes qui ne sont pas dans ce cas afin de trouver quelles sont les périodes où elles sont soumises en continu à la loi SRU. Pour les communes soumises seulement un an à la loi SRU, la première année de soumission à la loi correspond à la période complète de soumission de ces communes.

# On garde une liste de communes réduites
communes_red = entrees_sorties_communes
communes_red$nb_annee = presence_communes$nb_annee
communes_red$premiere_annee = presence_communes$premiere_annee
communes_red$pres_06 = presence_communes$pres_06
communes_red = as.data.frame(communes_red)

communes_red = communes_red[communes_red$nb_annee != 0,] # entre 2006 et 2019
# on enlève les communes de la diagonale
communes_red = communes_red[(communes_red$nb_annee + communes_red$premiere_annee) != 2022,]
# on enlève les communes soumises une seule année
communes_red = communes_red[communes_red$nb_annee != 1,]

Il reste 555 communes.

# On cherche les nombres d'entrées et de sorties des communes qu'il nous reste
communes_red$nb_entrees = communes_red$pres_06 + communes_red$entree_07 + 
  communes_red$entree_08 + communes_red$entree_09 + communes_red$entree_10 + 
  communes_red$entree_11 + communes_red$entree_12 + communes_red$entree_13 + 
  communes_red$entree_14 + communes_red$entree_15 + communes_red$entree_16 + 
  communes_red$entree_17 + communes_red$entree_18 + communes_red$entree_19 +
  communes_red$entree_20
print("Nombre d'entrées :")
## [1] "Nombre d'entrées :"
table(communes_red$nb_entrees)
## 
##   1   2   3   4 
## 273 250  27   5
communes_red$nb_sorties = communes_red$sortie_06 + communes_red$sortie_07 + 
  communes_red$sortie_08 + communes_red$sortie_09 + communes_red$sortie_10 + 
  communes_red$sortie_11 + communes_red$sortie_12 + communes_red$sortie_13 + 
  communes_red$sortie_14 + communes_red$sortie_15 + communes_red$sortie_16 + 
  communes_red$sortie_17 + communes_red$sortie_18 + communes_red$sortie_19 +
  communes_red$sortie_20
print("Nombre de sorties")
## [1] "Nombre de sorties"
table(communes_red$nb_sorties)
## 
##   1   2   3   4 
## 452  84  17   2
table(communes_red$nb_entrees, communes_red$nb_sorties)
##    
##       1   2   3   4
##   1 273   0   0   0
##   2 179  71   0   0
##   3   0  13  14   0
##   4   0   0   3   2

Il y a 273 communes non soumises à la loi SRU en 2021 qui sont soumises à la loi SRU sans discontinuité et plus d’un an.

# répartition des communes ayant une période de soumission selon 
# leur première année de soumission
# le nombre d'année de soumission
table(communes_red$premiere_annee[communes_red$nb_entrees == 1])
## 
## 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 
##   81    1   51    2   30    2    4   16   36   23   13    4    9    1
table(communes_red$nb_annee[communes_red$nb_entrees == 1])
## 
##  2  3  4  5  6  7  8  9 10 11 12 13 14 15 
## 37 29 29 33 15 21 20 11 35  5 21  3  9  5
table(communes_red$premiere_annee[communes_red$nb_entrees == 1], communes_red$nb_annee[communes_red$nb_entrees == 1])
##       
##         2  3  4  5  6  7  8  9 10 11 12 13 14 15
##   2006  7  2  7  6  5 13  2  3  1  3 15  3  9  5
##   2007  1  0  0  0  0  0  0  0  0  0  0  0  0  0
##   2008  1  0  1  1  2  0  2  6 31  2  5  0  0  0
##   2009  0  0  0  0  0  0  0  1  0  0  1  0  0  0
##   2010  0  1  2  7  1  2 13  1  3  0  0  0  0  0
##   2011  0  0  0  0  0  2  0  0  0  0  0  0  0  0
##   2012  1  0  0  0  2  0  1  0  0  0  0  0  0  0
##   2013  1  1  1  8  1  2  2  0  0  0  0  0  0  0
##   2014  1  4 17 10  2  2  0  0  0  0  0  0  0  0
##   2015  4 16  0  1  2  0  0  0  0  0  0  0  0  0
##   2016 12  0  1  0  0  0  0  0  0  0  0  0  0  0
##   2017  0  4  0  0  0  0  0  0  0  0  0  0  0  0
##   2018  8  1  0  0  0  0  0  0  0  0  0  0  0  0
##   2019  1  0  0  0  0  0  0  0  0  0  0  0  0  0
# Les 32 communes avec au moins trois entrées dans les bilans annuels SRU c'est-à-dire au moins 3 périodes de soumission à la loi SRU
presence_communes[presence_communes$code_commune %in% communes_red$code_commune[communes_red$nb_entrees >= 3],]
##      code_commune pres_06 pres_07 pres_08 pres_09 pres_10 pres_11 pres_12
## 158         14738    TRUE    TRUE    TRUE    TRUE    TRUE   FALSE   FALSE
## 211         22215   FALSE   FALSE    TRUE    TRUE    TRUE    TRUE    TRUE
## 507         39526   FALSE   FALSE   FALSE   FALSE    TRUE    TRUE    TRUE
## 508         40088   FALSE   FALSE    TRUE   FALSE   FALSE   FALSE   FALSE
## 522         42234   FALSE   FALSE    TRUE   FALSE    TRUE    TRUE    TRUE
## 683         57591    TRUE   FALSE    TRUE   FALSE    TRUE    TRUE    TRUE
## 694         59107   FALSE   FALSE    TRUE    TRUE   FALSE   FALSE   FALSE
## 695         59143    TRUE    TRUE    TRUE    TRUE   FALSE    TRUE   FALSE
## 698         59202    TRUE    TRUE    TRUE    TRUE   FALSE    TRUE   FALSE
## 702         59239   FALSE   FALSE    TRUE   FALSE   FALSE   FALSE   FALSE
## 714         59317    TRUE    TRUE    TRUE    TRUE   FALSE    TRUE   FALSE
## 739         59527    TRUE   FALSE   FALSE    TRUE   FALSE   FALSE   FALSE
## 761         62035    TRUE   FALSE   FALSE   FALSE    TRUE   FALSE    TRUE
## 762         62126    TRUE   FALSE   FALSE   FALSE    TRUE   FALSE    TRUE
## 768         62276    TRUE   FALSE   FALSE   FALSE    TRUE   FALSE    TRUE
## 775         62604   FALSE   FALSE    TRUE    TRUE    TRUE   FALSE    TRUE
## 778         62755    TRUE    TRUE    TRUE    TRUE   FALSE   FALSE   FALSE
## 782         62861   FALSE   FALSE    TRUE   FALSE    TRUE   FALSE    TRUE
## 783         62863    TRUE   FALSE   FALSE   FALSE    TRUE   FALSE    TRUE
## 815         64284    TRUE    TRUE    TRUE   FALSE    TRUE    TRUE   FALSE
## 860         67267    TRUE    TRUE    TRUE    TRUE    TRUE   FALSE    TRUE
## 948         71118    TRUE    TRUE    TRUE    TRUE    TRUE   FALSE   FALSE
## 967         73213   FALSE   FALSE   FALSE   FALSE    TRUE   FALSE    TRUE
## 1031        77143    TRUE    TRUE    TRUE    TRUE    TRUE    TRUE    TRUE
## 1038        77243   FALSE    TRUE    TRUE   FALSE    TRUE    TRUE    TRUE
## 1058        77407    TRUE    TRUE    TRUE    TRUE    TRUE    TRUE   FALSE
## 1156        81065   FALSE   FALSE   FALSE   FALSE    TRUE    TRUE   FALSE
## 1277        91179    TRUE   FALSE   FALSE    TRUE    TRUE    TRUE    TRUE
## 1334        92022    TRUE   FALSE   FALSE   FALSE    TRUE    TRUE   FALSE
## 1435        97113    TRUE   FALSE   FALSE   FALSE    TRUE    TRUE    TRUE
## 1436        97115    TRUE   FALSE   FALSE   FALSE    TRUE    TRUE    TRUE
## 1474        97307   FALSE   FALSE    TRUE   FALSE   FALSE   FALSE    TRUE
##      pres_13 pres_14 pres_15 pres_16 pres_17 pres_18 pres_19 pres_20 pres_21
## 158    FALSE   FALSE   FALSE    TRUE   FALSE   FALSE   FALSE    TRUE    TRUE
## 211     TRUE    TRUE   FALSE    TRUE    TRUE   FALSE   FALSE    TRUE    TRUE
## 507     TRUE   FALSE    TRUE   FALSE    TRUE   FALSE   FALSE   FALSE   FALSE
## 508    FALSE    TRUE    TRUE   FALSE   FALSE    TRUE   FALSE   FALSE   FALSE
## 522    FALSE   FALSE   FALSE    TRUE   FALSE   FALSE   FALSE   FALSE   FALSE
## 683    FALSE   FALSE   FALSE    TRUE    TRUE    TRUE    TRUE    TRUE    TRUE
## 694     TRUE   FALSE   FALSE   FALSE    TRUE    TRUE    TRUE   FALSE   FALSE
## 695     TRUE    TRUE    TRUE    TRUE    TRUE   FALSE   FALSE   FALSE   FALSE
## 698     TRUE    TRUE    TRUE    TRUE    TRUE    TRUE    TRUE    TRUE    TRUE
## 702     TRUE   FALSE   FALSE    TRUE    TRUE   FALSE   FALSE   FALSE   FALSE
## 714     TRUE    TRUE    TRUE    TRUE    TRUE    TRUE    TRUE    TRUE    TRUE
## 739    FALSE    TRUE    TRUE    TRUE    TRUE    TRUE    TRUE    TRUE    TRUE
## 761     TRUE    TRUE    TRUE    TRUE    TRUE    TRUE    TRUE    TRUE    TRUE
## 762     TRUE    TRUE    TRUE    TRUE    TRUE   FALSE   FALSE   FALSE   FALSE
## 768     TRUE    TRUE    TRUE    TRUE    TRUE   FALSE   FALSE   FALSE   FALSE
## 775     TRUE   FALSE   FALSE    TRUE   FALSE    TRUE    TRUE    TRUE    TRUE
## 778    FALSE   FALSE   FALSE    TRUE   FALSE    TRUE    TRUE    TRUE   FALSE
## 782     TRUE   FALSE   FALSE    TRUE    TRUE   FALSE   FALSE   FALSE   FALSE
## 783     TRUE    TRUE    TRUE    TRUE    TRUE    TRUE    TRUE    TRUE    TRUE
## 815    FALSE   FALSE   FALSE   FALSE   FALSE    TRUE   FALSE   FALSE   FALSE
## 860    FALSE    TRUE    TRUE    TRUE    TRUE    TRUE    TRUE    TRUE    TRUE
## 948     TRUE   FALSE   FALSE    TRUE    TRUE   FALSE   FALSE    TRUE    TRUE
## 967    FALSE   FALSE    TRUE    TRUE   FALSE   FALSE   FALSE   FALSE   FALSE
## 1031    TRUE    TRUE   FALSE   FALSE   FALSE    TRUE   FALSE    TRUE    TRUE
## 1038   FALSE    TRUE    TRUE    TRUE    TRUE    TRUE    TRUE    TRUE    TRUE
## 1058   FALSE    TRUE    TRUE    TRUE   FALSE    TRUE    TRUE    TRUE    TRUE
## 1156    TRUE   FALSE   FALSE   FALSE    TRUE   FALSE   FALSE   FALSE   FALSE
## 1277   FALSE   FALSE    TRUE    TRUE    TRUE    TRUE    TRUE    TRUE    TRUE
## 1334   FALSE    TRUE    TRUE    TRUE    TRUE    TRUE    TRUE   FALSE   FALSE
## 1435    TRUE   FALSE   FALSE    TRUE    TRUE    TRUE    TRUE    TRUE    TRUE
## 1436    TRUE   FALSE   FALSE    TRUE   FALSE    TRUE   FALSE   FALSE   FALSE
## 1474   FALSE   FALSE   FALSE   FALSE   FALSE    TRUE    TRUE   FALSE   FALSE
##      nb_annee premiere_annee
## 158         8           2006
## 211        11           2008
## 507         6           2010
## 508         4           2008
## 522         5           2008
## 683        11           2006
## 694         6           2008
## 695        10           2006
## 698        14           2006
## 702         4           2008
## 714        14           2006
## 739        10           2006
## 761        12           2006
## 762         8           2006
## 768         8           2006
## 775        10           2008
## 778         8           2006
## 782         6           2008
## 783        12           2006
## 815         6           2006
## 860        14           2006
## 948        10           2006
## 967         4           2010
## 1031       12           2006
## 1038       13           2007
## 1058       13           2006
## 1156        4           2010
## 1277       12           2006
## 1334        9           2006
## 1435       11           2006
## 1436        7           2006
## 1474        4           2008

Les 179 communes avec 2 entrées et une sortie : elles sont soumises pendant deux périodes et la deuxième dure jusqu’en 2021.

# on crée une base avec que ces données
pres_2_entr_1_sort = presence_communes[presence_communes$code_commune %in% communes_red$code_commune[communes_red$nb_entrees == 2 & communes_red$nb_sorties == 1],]

# On va chercher la date de deuxième entrée 
temp = rep(NA, length(pres_2_entr_1_sort$code_commune))
temp2 = rep(NA, length(pres_2_entr_1_sort$code_commune))
for (i in 1:length(pres_2_entr_1_sort$code_commune)){
  # Pour chacune des 179 communes, on cherche la dernière année d'absence (pres == 0)
  temp[i] = 2008 # 2008 est la première année où il peut y avoir une deuxième entrée
  if (pres_2_entr_1_sort$pres_08[i] == 0){temp[i] = 2009}
  if (pres_2_entr_1_sort$pres_09[i] == 0){temp[i] = 2010}
  if (pres_2_entr_1_sort$pres_10[i] == 0){temp[i] = 2011}
  if (pres_2_entr_1_sort$pres_11[i] == 0){temp[i] = 2012}
  if (pres_2_entr_1_sort$pres_12[i] == 0){temp[i] = 2013}
  if (pres_2_entr_1_sort$pres_13[i] == 0){temp[i] = 2014}
  if (pres_2_entr_1_sort$pres_14[i] == 0){temp[i] = 2015}
  if (pres_2_entr_1_sort$pres_15[i] == 0){temp[i] = 2016}
  if (pres_2_entr_1_sort$pres_16[i] == 0){temp[i] = 2017}
  if (pres_2_entr_1_sort$pres_17[i] == 0){temp[i] = 2018}
  if (pres_2_entr_1_sort$pres_18[i] == 0){temp[i] = 2019}
  if (pres_2_entr_1_sort$pres_19[i] == 0){temp[i] = 2020}
  if (pres_2_entr_1_sort$pres_20[i] == 0){temp[i] = 2021}
  
  # date de sortie (première année non soumise)
  temp2[i] <- pres_2_entr_1_sort$nb_annee[i] - 2022 + temp[i] + pres_2_entr_1_sort$premiere_annee[i]
}
pres_2_entr_1_sort$entree2 = temp
tab = c()
tab['2008'] <- 0 ; tab <- c(tab, table(temp)[1:2]) ; tab['2011'] <- 0
tab <- c(tab, table(temp)[3:9]) ; tab['2019'] <- 0 
tab <- c(tab, table(temp)['2020']) ; tab['2021'] <- 0

pres_2_entr_1_sort$sortie = temp2

couleurs = c('white', 'oldlace', 'mistyrose1', 'white', 'pink', 'lightpink2', 
             'palevioletred', 'palevioletred4', 'plum4', 'purple4', 'navy', 
             'white', 'lightslateblue', 'white')
barplot(tab, col = couleurs, xlab = "années des bilans annuels SRU",
     ylab = "éffectifs",
     main = "Diagramme en barres des dates de 2ème entrée dans les bilans SRU")

couleurs = c('oldlace', 'mistyrose1', 'pink', 'lightpink2', 'palevioletred', 
             'palevioletred4', 'plum4', 'purple4', 'navy', 'lightslateblue')

barplot(table(temp, pres_2_entr_1_sort$premiere_annee), beside = FALSE, 
        col = couleurs, xlab = 'Période 1 : première année')
legend('topright', legend = names(table(temp)), fil = couleurs, ncol = 2,
       title = "Période 2 : première année")
title("Premières années de soumission à la loi SRU des deux périodes")

barplot(table(temp, pres_2_entr_1_sort$premiere_annee)[,-1], beside = FALSE, 
        col = couleurs, xlab = 'Période 1 : première année')
legend('topright', legend = names(table(temp)), fil = couleurs, ncol = 2,
       title = "Période 2 : première année")
title("Premières années de soumission à la loi SRU des deux périodes")

barplot(table(pres_2_entr_1_sort$premiere_annee, temp)['2006',], beside = FALSE, 
        col = couleurs, xlab = 'Période 1 : première année')
title("Première année de soumission à la loi SRU de la période 2 pour les communes soumises en 2006")

table(temp[pres_2_entr_1_sort$premiere_annee == 2006], temp2[pres_2_entr_1_sort$premiere_annee == 2006])
##       
##        2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019
##   2009    1    0    0    0    0    0    0    0    0    0    0    0    0
##   2010    1    0    0    0    0    0    0    0    0    0    0    0    0
##   2013    0    1    0    0    0    1    0    0    0    0    0    0    0
##   2014    1    3    2    5    3    3    3    0    0    0    0    0    0
##   2015    0    0    1    0    0    0    0    0    0    0    0    0    0
##   2016    0    2    0    2    1    3    7    0   27    0    0    0    0
##   2017    0    0    0    2    0    0    0    0    1    1    0    0    0
##   2018    0    0    1    0    1    0    0    0    5    0    4    0    0
##   2020    0    0    0    0    0    0    0    1    0    0    0    8    2
a = sqldf("SELECT premiere_annee, sortie, entree2, count(code_commune)
       FROM pres_2_entr_1_sort
       GROUP BY premiere_annee, sortie, entree2")
print(a)
##    premiere_annee sortie entree2 count(code_commune)
## 1            2006   2007    2009                   1
## 2            2006   2007    2010                   1
## 3            2006   2007    2014                   1
## 4            2006   2008    2013                   1
## 5            2006   2008    2014                   3
## 6            2006   2008    2016                   2
## 7            2006   2009    2014                   2
## 8            2006   2009    2015                   1
## 9            2006   2009    2018                   1
## 10           2006   2010    2014                   5
## 11           2006   2010    2016                   2
## 12           2006   2010    2017                   2
## 13           2006   2011    2014                   3
## 14           2006   2011    2016                   1
## 15           2006   2011    2018                   1
## 16           2006   2012    2013                   1
## 17           2006   2012    2014                   3
## 18           2006   2012    2016                   3
## 19           2006   2013    2014                   3
## 20           2006   2013    2016                   7
## 21           2006   2014    2020                   1
## 22           2006   2015    2016                  27
## 23           2006   2015    2017                   1
## 24           2006   2015    2018                   5
## 25           2006   2016    2017                   1
## 26           2006   2017    2018                   4
## 27           2006   2018    2020                   8
## 28           2006   2019    2020                   2
## 29           2008   2009    2010                   6
## 30           2008   2009    2014                   1
## 31           2008   2009    2016                   2
## 32           2008   2010    2018                   1
## 33           2008   2011    2012                   1
## 34           2008   2013    2014                   1
## 35           2008   2015    2016                   2
## 36           2008   2016    2017                   1
## 37           2008   2017    2018                   3
## 38           2008   2018    2020                  10
## 39           2009   2015    2016                   1
## 40           2010   2011    2012                   1
## 41           2010   2011    2014                   2
## 42           2010   2013    2014                   3
## 43           2010   2014    2020                   1
## 44           2010   2015    2016                   1
## 45           2010   2015    2018                   1
## 46           2010   2018    2020                   3
## 47           2011   2013    2015                   3
## 48           2011   2017    2018                   1
## 49           2011   2018    2020                   2
## 50           2012   2013    2014                   1
## 51           2012   2014    2016                   1
## 52           2012   2016    2017                   1
## 53           2012   2018    2020                   1
## 54           2013   2014    2015                   1
## 55           2013   2014    2016                   5
## 56           2013   2015    2017                   1
## 57           2013   2016    2017                   1
## 58           2013   2017    2018                   1
## 59           2013   2019    2020                   1
## 60           2014   2015    2016                   3
## 61           2014   2015    2017                   1
## 62           2014   2015    2018                   2
## 63           2014   2015    2020                   1
## 64           2014   2016    2017                   1
## 65           2014   2017    2018                   2
## 66           2014   2018    2020                   5
## 67           2015   2018    2020                   4
## 68           2016   2017    2018                   2
## 69           2017   2018    2020                   3
## 70           2017   2019    2020                   1

71 communes ont deux périodes de soumission à la loi SRU dans les bilans annuels SRU, avec une deuxième période qui se termine avant le bilan annuel SRU 2021.

# on crée une base avec seulement ces données
pres_2_entr_2_sort = presence_communes[presence_communes$code_commune %in% communes_red$code_commune[communes_red$nb_entrees == 2 & communes_red$nb_sorties == 2],]

# On va chercher la date de deuxième entrée 
temp = rep(NA, length(pres_2_entr_2_sort$code_commune)) # dates de deuxième entrée
temp1 = rep(NA, length(pres_2_entr_2_sort$code_commune)) # dates de première sortie
temp2 = rep(NA, length(pres_2_entr_2_sort$code_commune)) # dates de deuxième sortie

for (i in 1:length(pres_2_entr_2_sort$code_commune)){
  temp[i] = 2008 # 2008 est la première année où il peut y avoir une deuxième entrée
  if (pres_2_entr_2_sort$pres_08[i] - pres_2_entr_2_sort$pres_09[i] == -1){temp[i] = 2009}
  if (pres_2_entr_2_sort$pres_09[i] - pres_2_entr_2_sort$pres_10[i] == -1){temp[i] = 2010}
  if (pres_2_entr_2_sort$pres_10[i] - pres_2_entr_2_sort$pres_11[i] == -1){temp[i] = 2011}
  if (pres_2_entr_2_sort$pres_11[i] - pres_2_entr_2_sort$pres_12[i] == -1){temp[i] = 2012}
  if (pres_2_entr_2_sort$pres_12[i] - pres_2_entr_2_sort$pres_13[i] == -1){temp[i] = 2013}
  if (pres_2_entr_2_sort$pres_13[i] - pres_2_entr_2_sort$pres_14[i] == -1){temp[i] = 2014}
  if (pres_2_entr_2_sort$pres_14[i] - pres_2_entr_2_sort$pres_15[i] == -1){temp[i] = 2015}
  if (pres_2_entr_2_sort$pres_15[i] - pres_2_entr_2_sort$pres_16[i] == -1){temp[i] = 2016}
  if (pres_2_entr_2_sort$pres_16[i] - pres_2_entr_2_sort$pres_17[i] == -1){temp[i] = 2017}
  if (pres_2_entr_2_sort$pres_17[i] - pres_2_entr_2_sort$pres_18[i] == -1){temp[i] = 2018}
  if (pres_2_entr_2_sort$pres_18[i] - pres_2_entr_2_sort$pres_19[i] == -1){temp[i] = 2019}
  if (pres_2_entr_2_sort$pres_19[i] - pres_2_entr_2_sort$pres_20[i] == -1){temp[i] = 2020}
  # Ces communes ne sont pas soumises dans le bilan annuel SRU 2021
  
  # date de première sortie (première année non soumise)
  temp1[i] = 2019
  if (pres_2_entr_2_sort$pres_17[i] - pres_2_entr_2_sort$pres_18[i] == 1){temp1[i] = 2018}
  if (pres_2_entr_2_sort$pres_16[i] - pres_2_entr_2_sort$pres_17[i] == 1){temp1[i] = 2017}
  if (pres_2_entr_2_sort$pres_15[i] - pres_2_entr_2_sort$pres_16[i] == 1){temp1[i] = 2016}
  if (pres_2_entr_2_sort$pres_14[i] - pres_2_entr_2_sort$pres_15[i] == 1){temp1[i] = 2015}
  if (pres_2_entr_2_sort$pres_13[i] - pres_2_entr_2_sort$pres_14[i] == 1){temp1[i] = 2014}
  if (pres_2_entr_2_sort$pres_12[i] - pres_2_entr_2_sort$pres_13[i] == 1){temp1[i] = 2013}
  if (pres_2_entr_2_sort$pres_11[i] - pres_2_entr_2_sort$pres_12[i] == 1){temp1[i] = 2012}
  if (pres_2_entr_2_sort$pres_10[i] - pres_2_entr_2_sort$pres_11[i] == 1){temp1[i] = 2011}
  if (pres_2_entr_2_sort$pres_09[i] - pres_2_entr_2_sort$pres_10[i] == 1){temp1[i] = 2010}
  if (pres_2_entr_2_sort$pres_08[i] - pres_2_entr_2_sort$pres_09[i] == 1){temp1[i] = 2009}
  if (pres_2_entr_2_sort$pres_07[i] - pres_2_entr_2_sort$pres_08[i] == 1){temp1[i] = 2008}
  if (pres_2_entr_2_sort$pres_06[i] - pres_2_entr_2_sort$pres_07[i] == 1){temp1[i] = 2007}
  
  # date de seconde sortie (première année non soumise)
  temp2[i] = 2009
  if (pres_2_entr_2_sort$pres_09[i] - pres_2_entr_2_sort$pres_10[i] == 1){temp2[i] = 2010}
  if (pres_2_entr_2_sort$pres_10[i] - pres_2_entr_2_sort$pres_11[i] == 1){temp2[i] = 2011}
  if (pres_2_entr_2_sort$pres_11[i] - pres_2_entr_2_sort$pres_12[i] == 1){temp2[i] = 2012}
  if (pres_2_entr_2_sort$pres_12[i] - pres_2_entr_2_sort$pres_13[i] == 1){temp2[i] = 2013}
  if (pres_2_entr_2_sort$pres_13[i] - pres_2_entr_2_sort$pres_14[i] == 1){temp2[i] = 2014}
  if (pres_2_entr_2_sort$pres_14[i] - pres_2_entr_2_sort$pres_15[i] == 1){temp2[i] = 2015}
  if (pres_2_entr_2_sort$pres_15[i] - pres_2_entr_2_sort$pres_16[i] == 1){temp2[i] = 2016}
  if (pres_2_entr_2_sort$pres_16[i] - pres_2_entr_2_sort$pres_17[i] == 1){temp2[i] = 2017}
  if (pres_2_entr_2_sort$pres_17[i] - pres_2_entr_2_sort$pres_18[i] == 1){temp2[i] = 2018}
  if (pres_2_entr_2_sort$pres_18[i] - pres_2_entr_2_sort$pres_19[i] == 1){temp2[i] = 2019}
  if (pres_2_entr_2_sort$pres_19[i] - pres_2_entr_2_sort$pres_20[i] == 1){temp2[i] = 2020}
  if (pres_2_entr_2_sort$pres_20[i] - pres_2_entr_2_sort$pres_21[i] == 1){temp2[i] = 2021}
}

pres_2_entr_2_sort$sortie1 = temp1
pres_2_entr_2_sort$entree2 = temp
pres_2_entr_2_sort$sortie2 = temp2
par(mfrow = c(2,2))
barplot(table(pres_2_entr_2_sort$premiere_annee), col = 'plum', ylab = "effectif",
        main = "Première entrée")
barplot(table(pres_2_entr_2_sort$entree2), col = 'plum', ylab = "effectif",
        main = "Deuxième entrée")
barplot(table(pres_2_entr_2_sort$sortie1), col = 'plum', ylab = "effectif",
        main = "Première sortie")
barplot(table(pres_2_entr_2_sort$sortie2), col = 'plum', ylab = "effectif",
        main = "Deuxième sortie")
par(mfrow = c(1,1))
title("Dates d'entrées et de sorties des bilans annuels SRU", line = 3)

pres_2_entr_2_sort[,c(1,19:22)]
##      code_commune premiere_annee sortie1 entree2 sortie2
## 3           01160           2014    2017    2019    2020
## 15          03023           2010    2011    2014    2017
## 72          10325           2016    2019    2020    2021
## 159         15012           2008    2015    2016    2018
## 160         15267           2010    2015    2016    2018
## 242         27602           2006    2013    2014    2015
## 251         29061           2006    2011    2016    2018
## 252         29069           2008    2012    2016    2018
## 253         29075           2006    2011    2016    2018
## 256         29189           2006    2011    2016    2018
## 259         29212           2006    2011    2016    2018
## 262         29235           2006    2011    2016    2018
## 336         31555           2006    2013    2014    2018
## 349         33096           2006    2008    2014    2016
## 442         35179           2013    2016    2017    2018
## 444         35206           2008    2012    2013    2014
## 460         37050           2006    2018    2020    2021
## 466         37163           2013    2018    2020    2021
## 520         42223           2006    2007    2016    2017
## 528         42302           2006    2007    2016    2017
## 532         42330           2006    2007    2016    2017
## 574         44210           2007    2008    2012    2015
## 626         51242           2006    2009    2016    2018
## 641         54430           2008    2010    2015    2016
## 643         54495           2006    2010    2017    2018
## 646         54578           2006    2010    2017    2018
## 671         57032           2006    2008    2010    2011
## 673         57143           2006    2013    2016    2021
## 674         57306           2011    2013    2015    2019
## 686         57757           2006    2010    2011    2019
## 687         58121           2008    2009    2011    2012
## 708         59279           2006    2008    2014    2018
## 727         59428           2008    2014    2015    2021
## 757         61397           2008    2013    2016    2018
## 764         62139           2006    2011    2012    2014
## 779         62757           2006    2011    2012    2014
## 781         62774           2006    2008    2009    2010
## 785         62893           2008    2011    2012    2013
## 795         63164           2006    2012    2013    2015
## 811         64237           2006    2015    2018    2020
## 893         68376           2006    2011    2012    2013
## 946         71059           2008    2010    2012    2018
## 949         71221           2008    2014    2016    2018
## 950         71445           2006    2011    2013    2014
## 952         71486           2008    2010    2012    2018
## 953         72008           2006    2013    2016    2018
## 956         72213           2008    2014    2016    2018
## 957         72328           2010    2013    2016    2018
## 958         72386           2006    2013    2016    2018
## 1023        77085           2006    2014    2018    2021
## 1025        77111           2006    2007    2008    2021
## 1042        77276           2008    2009    2010    2018
## 1061        77447           2008    2009    2010    2019
## 1079        78118           2006    2013    2014    2020
## 1119        78423           2014    2015    2016    2017
## 1157        81120           2009    2014    2017    2018
## 1159        81163           2008    2014    2017    2018
## 1259        89263           2008    2015    2016    2020
## 1262        90032           2013    2014    2016    2018
## 1283        91272           2006    2015    2017    2019
## 1286        91326           2006    2010    2014    2018
## 1303        91477           2006    2007    2014    2015
## 1311        91570           2006    2015    2017    2020
## 1345        92071           2006    2013    2014    2021
## 1358        93064           2006    2013    2015    2018
## 1434        97111           2012    2014    2016    2018
## 1441        97121           2012    2014    2016    2018
## 1445        97129           2012    2014    2016    2018
## 1458        97217           2014    2015    2016    2018
## 1464        97225           2008    2011    2012    2013
## 1483        97402           2008    2009    2010    2011
a = sqldf("SELECT premiere_annee, sortie1, entree2, sortie2, count(code_commune)
       FROM pres_2_entr_2_sort
       GROUP BY premiere_annee, sortie1, entree2, sortie2")
print(a)
##    premiere_annee sortie1 entree2 sortie2 count(code_commune)
## 1            2006    2007    2008    2021                   1
## 2            2006    2007    2014    2015                   1
## 3            2006    2007    2016    2017                   3
## 4            2006    2008    2009    2010                   1
## 5            2006    2008    2010    2011                   1
## 6            2006    2008    2014    2016                   1
## 7            2006    2008    2014    2018                   1
## 8            2006    2009    2016    2018                   1
## 9            2006    2010    2011    2019                   1
## 10           2006    2010    2014    2018                   1
## 11           2006    2010    2017    2018                   2
## 12           2006    2011    2012    2013                   1
## 13           2006    2011    2012    2014                   2
## 14           2006    2011    2013    2014                   1
## 15           2006    2011    2016    2018                   5
## 16           2006    2012    2013    2015                   1
## 17           2006    2013    2014    2015                   1
## 18           2006    2013    2014    2018                   1
## 19           2006    2013    2014    2020                   1
## 20           2006    2013    2014    2021                   1
## 21           2006    2013    2015    2018                   1
## 22           2006    2013    2016    2018                   2
## 23           2006    2013    2016    2021                   1
## 24           2006    2014    2018    2021                   1
## 25           2006    2015    2017    2019                   1
## 26           2006    2015    2017    2020                   1
## 27           2006    2015    2018    2020                   1
## 28           2006    2018    2020    2021                   1
## 29           2007    2008    2012    2015                   1
## 30           2008    2009    2010    2011                   1
## 31           2008    2009    2010    2018                   1
## 32           2008    2009    2010    2019                   1
## 33           2008    2009    2011    2012                   1
## 34           2008    2010    2012    2018                   2
## 35           2008    2010    2015    2016                   1
## 36           2008    2011    2012    2013                   2
## 37           2008    2012    2013    2014                   1
## 38           2008    2012    2016    2018                   1
## 39           2008    2013    2016    2018                   1
## 40           2008    2014    2015    2021                   1
## 41           2008    2014    2016    2018                   2
## 42           2008    2014    2017    2018                   1
## 43           2008    2015    2016    2018                   1
## 44           2008    2015    2016    2020                   1
## 45           2009    2014    2017    2018                   1
## 46           2010    2011    2014    2017                   1
## 47           2010    2013    2016    2018                   1
## 48           2010    2015    2016    2018                   1
## 49           2011    2013    2015    2019                   1
## 50           2012    2014    2016    2018                   3
## 51           2013    2014    2016    2018                   1
## 52           2013    2016    2017    2018                   1
## 53           2013    2018    2020    2021                   1
## 54           2014    2015    2016    2017                   1
## 55           2014    2015    2016    2018                   1
## 56           2014    2017    2019    2020                   1
## 57           2016    2019    2020    2021                   1

Bilans triennaux

# les communes qui sortent des bilans triennaux entre celui de 2005-2007 et celui de 2008-2010
com_sort_07_08_tri = sqldf("SELECT code_commune FROM co_so_05_07 
                            EXCEPT 
                            SELECT code_commune FROM co_so_08_10")
# 30 communes

# les communes qui sortent des bilans triennaux entre celui de 2008-2010 et celui de 2011-2013
com_sort_10_11_tri = sqldf("SELECT code_commune FROM co_so_08_10 
                            EXCEPT 
                            SELECT code_commune FROM co_so_11_13")
# 85 communes

# les communes qui sortent des bilans triennaux entre celui de 2011-2013 et celui de 2014-2016
com_sort_13_14_tri = sqldf("SELECT code_commune FROM co_so_11_13 
                            EXCEPT 
                            SELECT code_commune FROM co_so_14_16")
# 191 communes

# les communes qui sortent des bilans triennaux entre celui de 2014-2016 et celui de 2017-2019
com_sort_16_17_tri = sqldf("SELECT code_commune FROM co_so_14_16
                            EXCEPT 
                            SELECT code_commune FROM co_so_17_19")
# 0 commune
# les communes qui entrent des bilans triennaux entre celui de 2005-2007 et celui de 2008-2010
com_entr_07_08_tri = sqldf("SELECT code_commune FROM co_so_08_10 
                            EXCEPT 
                            SELECT code_commune FROM co_so_05_07")
# 277 communes

# les communes qui entrent des bilans triennaux entre celui de 2008-2010 et celui de 2011-2013
com_entr_10_11_tri = sqldf("SELECT code_commune FROM co_so_11_13 
                            EXCEPT 
                            SELECT code_commune FROM co_so_08_10")
# 129 communes

# les communes qui entrent des bilans triennaux entre celui de 2011-2013 et celui de 2014-2016
com_entr_13_14_tri = sqldf("SELECT code_commune FROM co_so_14_16
                            EXCEPT 
                            SELECT code_commune FROM co_so_11_13")
# 171 communes

# les communes qui entrent des bilans triennaux entre celui de 2014-2016 et celui de 2017-2019
com_entr_16_17_tri = sqldf("SELECT code_commune FROM co_so_17_19
                            EXCEPT 
                            SELECT code_commune FROM co_so_14_16")
# 33 communes
entrees_sorties_triennal = c()

entrees_sorties_triennal$entree_05 = co_so_tri$code_commune %in% co_so_05_07$code_commune
entrees_sorties_triennal$entree_08 = co_so_tri$code_commune %in% com_entr_07_08_tri$code_commune
entrees_sorties_triennal$entree_11 = co_so_tri$code_commune %in% com_entr_10_11_tri$code_commune
entrees_sorties_triennal$entree_14 = co_so_tri$code_commune %in% com_entr_13_14_tri$code_commune
entrees_sorties_triennal$entree_17 = co_so_tri$code_commune %in% com_entr_16_17_tri$code_commune

entrees_sorties_triennal$sorties_07 = co_so_tri$code_commune %in% com_sort_07_08_tri$code_commune
entrees_sorties_triennal$sorties_10 = co_so_tri$code_commune %in% com_sort_07_08_tri$code_commune
entrees_sorties_triennal$sorties_13 = co_so_tri$code_commune %in% com_sort_07_08_tri$code_commune
entrees_sorties_triennal$sorties_16 = co_so_tri$code_commune %in% com_sort_07_08_tri$code_commune

entrees_sorties_triennal = as.data.frame(entrees_sorties_triennal)
presence_triennal = c()
presence_triennal$pres_02_04 = co_so_tri$code_commune %in% co_so_02_04$code_commune
presence_triennal$pres_05_07 = co_so_tri$code_commune %in% co_so_05_07$code_commune
presence_triennal$pres_08_10 = co_so_tri$code_commune %in% co_so_08_10$code_commune
presence_triennal$pres_11_13 = co_so_tri$code_commune %in% co_so_11_13$code_commune
presence_triennal$pres_14_16 = co_so_tri$code_commune %in% co_so_14_16$code_commune
presence_triennal$pres_17_19 = co_so_tri$code_commune %in% co_so_17_19$code_commune

presence_triennal$nb_triennaux = presence_triennal$pres_05_07 +
  presence_triennal$pres_08_10 + presence_triennal$pres_11_13 +
  presence_triennal$pres_14_16 + presence_triennal$pres_17_19
for (i in 1:length(co_so_tri$code_commune)){
  presence_triennal$premier_triennal[i] = '2017-2019'
  if (presence_triennal$pres_02_04[i]){presence_triennal$premier_triennal[i] = '2002-2004'}
  if (presence_triennal$pres_14_16[i]){presence_triennal$premier_triennal[i] = '2014-2016'}
  if (presence_triennal$pres_11_13[i]){presence_triennal$premier_triennal[i] = '2011-2013'}
  if (presence_triennal$pres_08_10[i]){presence_triennal$premier_triennal[i] = '2008-2010'}
  if (presence_triennal$pres_05_07[i]){presence_triennal$premier_triennal[i] = '2005-2007'}
}

table(presence_triennal$premier_triennal, presence_triennal$nb_triennaux)
##            
##               0   1   2   3   4   5
##   2002-2004  10   0   0   0   0   0
##   2005-2007   0  13  35  75  22 585
##   2008-2010   0  31  82   5 159   0
##   2011-2013   0  40   0  81   0   0
##   2014-2016   0   0 140   0   0   0
##   2017-2019   0  33   0   0   0   0